/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.content; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import android.app.AlarmManager; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDoneException; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; import android.text.format.DateFormat; import android.util.Log; import com.galaxy.meetup.client.android.InstantUpload; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.analytics.EsAnalytics; import com.galaxy.meetup.client.android.analytics.OzActions; import com.galaxy.meetup.client.android.analytics.OzViews; import com.galaxy.meetup.client.android.api.EventReadOperation; import com.galaxy.meetup.client.android.api.GetEventOperation; import com.galaxy.meetup.client.android.api.GetEventThemesOperation; import com.galaxy.meetup.client.android.api.GetPhotoOperation; import com.galaxy.meetup.client.android.api.SendEventRsvpOperation; import com.galaxy.meetup.client.android.network.http.HttpOperation; import com.galaxy.meetup.client.android.network.http.HttpTransactionMetrics; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.service.EsSyncAdapterService; import com.galaxy.meetup.client.util.AccountsUtil; import com.galaxy.meetup.client.util.EsLog; import com.galaxy.meetup.client.util.NotificationUtils; import com.galaxy.meetup.server.client.domain.DataPhoto; import com.galaxy.meetup.server.client.domain.EmbedsPerson; import com.galaxy.meetup.server.client.domain.GenericJson; import com.galaxy.meetup.server.client.domain.Invitee; import com.galaxy.meetup.server.client.domain.InviteeSummary; import com.galaxy.meetup.server.client.domain.PlusEvent; import com.galaxy.meetup.server.client.domain.Update; import com.galaxy.meetup.server.client.util.JsonUtil; import com.galaxy.meetup.server.client.v2.domain.Event; import com.galaxy.meetup.server.client.v2.domain.EventOptions; import com.galaxy.meetup.server.client.v2.domain.Theme; import com.galaxy.meetup.server.client.v2.domain.ThemeImage; /** * * @author sihai * */ public class EsEventData { private static final String EVENT_QUERY_PROJECTION[] = { "event_data" }; private static final String SYNC_QUERY_PROJECTION[] = { "event_id", "polling_token", "resume_token", "event_data" }; private static final Object mSyncLock = new Object(); private static final Object sEventOperationSyncObject = new Object(); private static File sEventThemePlaceholderDir; private static Object sEventThemesLock = new Object(); public static boolean canAddPhotos(Event event, String userId) { boolean flag = false; if(event != null) { EventOptions options = event.getOptions(); if(!TextUtils.equals(userId, event.getPublisher()) && null != options) { flag = options.isOpenPhotoAcl(); } else { flag = true; } } return flag; } public static boolean canAddPhotos(PlusEvent plusevent, String s) { boolean flag = false; if(plusevent != null) { if(!TextUtils.equals(s, plusevent.getCreatorObfuscatedId()) && plusevent.getEventOptions() != null && plusevent.getEventOptions().getOpenPhotoAcl() != null) { boolean flag1 = plusevent.getEventOptions().getOpenPhotoAcl().booleanValue(); flag = false; if(flag1) flag = true; } else { flag = true; } } return flag; } public static boolean canInviteOthers(Event event, EsAccount esaccount) { boolean flag = true; if (event != null && esaccount != null) { if (!TextUtils.equals(event.getPublisher(), esaccount.getGaiaId())) { // TODO flag = true; } } else { flag = false; } return flag; } public static boolean canInviteOthers(PlusEvent plusevent, EsAccount esaccount) { boolean flag = true; if(plusevent != null && esaccount != null) { if(!TextUtils.equals(plusevent.getCreatorObfuscatedId(), esaccount.getGaiaId())) { boolean flag1; boolean flag2; if(plusevent.getViewerInfo() != null && plusevent.getViewerInfo().getInviter() != null) flag1 = flag; else flag1 = false; if(plusevent.getEventOptions() == null || plusevent.getEventOptions() != null && plusevent.getEventOptions().getOpenPhotoAcl() != null && plusevent.getEventOptions().getOpenPhotoAcl().booleanValue()) flag2 = flag; else flag2 = false; if(!flag1 || !flag2) flag = false; } } else { flag = false; } return flag; } public static boolean canRsvp(Event event) { // FIXME return true; } public static boolean canRsvp(PlusEvent plusevent) { boolean flag; if(plusevent.getIsBroadcastView() == null || !plusevent.getIsBroadcastView().booleanValue()) flag = true; else flag = false; return flag; } public static boolean canViewerAddPhotos(Event plusevent) { // FIXME return true; } public static boolean canViewerAddPhotos(PlusEvent plusevent) { boolean flag; if(plusevent != null && plusevent.getViewerInfo() != null && plusevent.getViewerInfo().getCanUploadPhotos() != null && plusevent.getViewerInfo().getCanUploadPhotos().booleanValue()) flag = true; else flag = false; return flag; } public static void copyRsvpFromSummary(PlusEvent plusevent, EsAccount esaccount) { if(plusevent.getInviteeSummary() == null || plusevent.getInviteeSummary().size() <= 0) return; Iterator iterator = plusevent.getInviteeSummary().iterator(); InviteeSummary inviteesummary = null; do { if(!iterator.hasNext()) break; inviteesummary = (InviteeSummary)iterator.next(); } while(inviteesummary.getSetByViewer() == null || !inviteesummary.getSetByViewer().booleanValue() || inviteesummary.getRsvpType() == null || TextUtils.equals(inviteesummary.getRsvpType(), "INVITED")); setViewerInfoRsvp(plusevent, esaccount, inviteesummary.getRsvpType()); } public static void deleteEvent(Context context, EsAccount esaccount, String s) { int i = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase().delete("events", "event_id=?", new String[] { s }); boolean flag = TextUtils.equals(s, InstantUpload.getInstantShareEventId(context)); boolean flag1 = false; if(flag) { flag1 = true; disableInstantShare(context); } if(i > 0) context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); if(EsLog.isLoggable("EsEventData", 3)) { StringBuilder stringbuilder = (new StringBuilder("[DELETE_EVENT], id: ")).append(s); String s1; if(flag1) s1 = "; disable IS"; else s1 = ""; Log.d("EsEventData", stringbuilder.append(s1).toString()); } } public static void disableInstantShare(Context context) { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#disableInstantShare; now: ")).append(System.currentTimeMillis()).toString()); enableInstantShareInternal(context, null, null, null, null, 0L, 0L); } public static void enableInstantShare(Context context, boolean flag, Event plusevent) { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#enableInstantShare; event: ")).append(plusevent.get_id()).toString()); AlarmManager alarmmanager = (AlarmManager)context.getSystemService("alarm"); android.app.PendingIntent pendingintent = Intents.getEventFinishedIntent(context, plusevent.get_id()); long l = getEventEndTime(plusevent); long l1 = System.currentTimeMillis(); alarmmanager.cancel(pendingintent); if(flag && 5000L + l1 < l) { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#enableInstantShare; start IS; now: ")).append(l1).append(", end: ").append(l).append(", wake in: ").append(l - l1).toString()); enableInstantShareInternal(context, EsAccountsData.getActiveAccount(context), plusevent.get_id(), plusevent.getPublisher(), plusevent.getName(), l1, l); alarmmanager.set(0, l, pendingintent); } else { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#enableInstantShare; event over; now: ")).append(l1).append(", end: ").append(l).toString()); disableInstantShare(context); } } public static void enableInstantShare(Context context, boolean flag, PlusEvent plusevent) { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#enableInstantShare; event: ")).append(plusevent.getId()).toString()); AlarmManager alarmmanager = (AlarmManager)context.getSystemService("alarm"); android.app.PendingIntent pendingintent = Intents.getEventFinishedIntent(context, plusevent.getId()); long l = getEventEndTime(plusevent); long l1 = System.currentTimeMillis(); alarmmanager.cancel(pendingintent); if(flag && 5000L + l1 < l) { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#enableInstantShare; start IS; now: ")).append(l1).append(", end: ").append(l).append(", wake in: ").append(l - l1).toString()); enableInstantShareInternal(context, EsAccountsData.getActiveAccount(context), plusevent.getId(), plusevent.getCreatorObfuscatedId(), plusevent.getName(), l1, l); alarmmanager.set(0, l, pendingintent); } else { if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#enableInstantShare; event over; now: ")).append(l1).append(", end: ").append(l).toString()); disableInstantShare(context); } } public static Cursor getMyCurrentEvents(Context context, EsAccount esaccount, long now, String as[]) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); String[] parameters = new String[]{Long.toString(now)}; return sqlitedatabase.query("events", as, "mine = 1 AND ? < end_time", parameters, null, null, "end_time ASC"); } public static InviteeSummary getInviteeSummary(PlusEvent plusevent, String s) { if(plusevent.getInviteeSummary() == null) return null; InviteeSummary inviteesummary1; for(Iterator iterator = plusevent.getInviteeSummary().iterator(); iterator.hasNext();) { inviteesummary1 = (InviteeSummary)iterator.next(); if(inviteesummary1.getRsvpType() == null || inviteesummary1.getCount().intValue() == 1 && inviteesummary1.getSetByViewer() != null && inviteesummary1.getSetByViewer().booleanValue() || !TextUtils.equals(s, inviteesummary1.getRsvpType())) { continue; } else { return inviteesummary1; } } return null; } private static Set getMyEventIds(SQLiteDatabase sqlitedatabase) { Cursor cursor = null; HashSet hashset = new HashSet(); try { cursor = sqlitedatabase.query("events", new String[] { "event_id" }, "mine = 1", null, null, null, null); for(; cursor.moveToNext(); hashset.add(cursor.getString(0))); return hashset; } finally { if(null != cursor) { cursor.close(); } } } public static Cursor getMyPastEvents(Context context, EsAccount esaccount, long l, String as[]) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); String as1[] = new String[1]; as1[0] = Long.toString(l); return sqlitedatabase.query("events", as, "mine = 1 AND ? > end_time AND source = 1", as1, null, null, "end_time DESC"); } public static PlusEvent getPlusEvent(Context context, EsAccount esaccount, String s) { if(esaccount == null || TextUtils.isEmpty(s)) { return null; } Cursor cursor = null; try { cursor = getEvent(context, esaccount, s, EVENT_QUERY_PROJECTION); if(null == cursor || !cursor.moveToNext()) { return null; } return (PlusEvent)JsonUtil.fromByteArray(cursor.getBlob(0), PlusEvent.class); } finally { if(null != cursor) { cursor.close(); } } } public static Cursor getEvent(Context context, EsAccount esaccount, String s, String as[]) { return EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase().query("events", as, "event_id=?", new String[] { s }, null, null, null); } public static int getRsvpStatus(Event plusevent) { String s = getRsvpType(plusevent); int i; if("CHECKIN".equals(s) || "ATTENDING".equals(s)) i = 1; else if("MAYBE".equals(s)) i = 2; else if("NOT_ATTENDING".equals(s) || "NOT_ATTENDING_AND_REMOVE".equals(s)) i = 3; else i = 0; return i; } public static int getRsvpStatus(PlusEvent plusevent) { String s = getRsvpType(plusevent); int i; if("CHECKIN".equals(s) || "ATTENDING".equals(s)) i = 1; else if("MAYBE".equals(s)) i = 2; else if("NOT_ATTENDING".equals(s) || "NOT_ATTENDING_AND_REMOVE".equals(s)) i = 3; else i = 0; return i; } public static String getRsvpType(Event plusevent) { // FIXME return "NOT_RESPONDED"; } public static String getRsvpType(PlusEvent plusevent) { String s; if(plusevent != null && plusevent.getViewerInfo() != null) { s = plusevent.getViewerInfo().getRsvpType(); if(!"CHECKIN".equals(s) && !"ATTENDING".equals(s) && !"MAYBE".equals(s) && !"NOT_ATTENDING".equals(s) && !"NOT_ATTENDING_AND_REMOVE".equals(s)) { if(EsLog.isLoggable("EsEventData", 3)) Log.d("EsEventData", (new StringBuilder("[FILTER_RSVP_TYPE]; ")).append(s).append(" not recognized").toString()); s = "NOT_RESPONDED"; } } else { s = "NOT_RESPONDED"; } return s; } public static String getImageUrl(Theme theme) { ThemeImage themeimage = getThemeImage(theme); String s; if(themeimage != null) s = themeimage.getUrl(); else s = null; return s; } public static Cursor getEventTheme(Context context, EsAccount esaccount, Long eventThemeId, String as[]) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); String s; String as1[]; Cursor cursor; if(eventThemeId.equals(-1L)) { s = "is_default!=0"; as1 = null; } else { s = "theme_id=?"; as1 = new String[1]; as1[0] = Long.toString(eventThemeId); } cursor = sqlitedatabase.query("event_themes", as, s, as1, null, null, "theme_id"); if(cursor.getCount() == 0) { cursor.close(); ensureFreshEventThemes(context, esaccount, null); cursor = sqlitedatabase.query("event_themes", as, s, as1, null, null, "theme_id"); } return cursor; } public static Cursor getEventThemes(Context context, EsAccount esaccount, int i, String as[]) { ensureFreshEventThemes(context, esaccount, null); SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); StringBuilder stringbuilder = new StringBuilder("is_featured="); int j; if(i == 0) j = 1; else j = 0; return sqlitedatabase.query("event_themes", as, stringbuilder.append(j).toString(), null, null, null, "sort_order ASC"); } public static Cursor retrieveEvent(Context context, EsAccount esaccount, String s, String s1, String as[]) { Cursor cursor = getEvent(context, esaccount, s, as); if(cursor.getCount() <= 0) { cursor.close(); if(getEventFromServer(context, esaccount, s, s1)) cursor = getEvent(context, esaccount, s, as); else cursor = null; } return cursor; } public static boolean isEventOver(Event event, long time) { if(time > getEventEndTime(event)) return true; else return false; } public static boolean isEventOver(PlusEvent plusevent, long l) { boolean flag; if(l > getEventEndTime(plusevent)) flag = true; else flag = false; return flag; } public static boolean isViewerCheckedIn(Event event) { return "CHECKIN".equals(getRsvpType(event)); } public static boolean isViewerCheckedIn(PlusEvent plusevent) { return "CHECKIN".equals(getRsvpType(plusevent)); } public static boolean isEventHangout(Event event) { EventOptions options = event.getOptions(); if(null != options && options.isHangout()) return true; else return false; } public static boolean isEventHangout(PlusEvent plusevent) { boolean flag; if(plusevent.getEventOptions() != null && plusevent.getEventOptions().getBroadcast() != null && plusevent.getEventOptions().getBroadcast().booleanValue()) flag = true; else flag = false; return flag; } public static long getEventEndTime(Event event) { long l; if(event.getEndTime() == null || event.getEndTime().getTimeMs() == null) l = 0x6ddd00L + event.getStartTime().getTimeMs().longValue(); else l = event.getEndTime().getTimeMs().longValue(); return l; } public static long getEventEndTime(PlusEvent plusevent) { long l; if(plusevent.getEndTime() == null || plusevent.getEndTime().getTimeMs() == null) l = 0x6ddd00L + plusevent.getStartTime().getTimeMs().longValue(); else l = plusevent.getEndTime().getTimeMs().longValue(); return l; } public static ThemeImage getThemeImage(Theme theme) { ThemeImage themeimage = null; if(theme != null) { List imageList = theme.getImageList(); themeimage = null; if(imageList != null) { Iterator iterator = imageList.iterator(); do { if(!iterator.hasNext()) break; ThemeImage themeimage1 = (ThemeImage)iterator.next(); if(themeimage1 != null) if("LARGE".equals(themeimage1.getAspectRatio())) { if("JPG".equals(themeimage1.getFormat())) themeimage = themeimage1; } else if(themeimage == null && !"MOV".equals(themeimage1.getFormat())) themeimage = themeimage1; } while(true); } } return themeimage; } private static void enableInstantShareInternal(final Context context, final EsAccount esaccount, final String activeISEventId, final String eventId, String s2, long l, long l1) { ContentResolver contentresolver = context.getContentResolver(); ContentValues contentvalues = new ContentValues(); boolean flag; String s3; if(activeISEventId != null) flag = true; else flag = false; s3 = InstantUpload.getInstantShareEventId(context); if(flag) { contentvalues.put("auto_upload_account_name", esaccount.getName()); contentvalues.put("auto_upload_account_type", AccountsUtil.ACCOUNT_TYPE); } contentvalues.put("instant_share_eventid", activeISEventId); contentvalues.put("instant_share_starttime", Long.valueOf(l)); contentvalues.put("instant_share_endtime", Long.valueOf(l1)); //contentresolver.update(InstantUploadFacade.SETTINGS_URI, contentvalues, null, null); if(flag) { NotificationUtils.notifyInstantShareEnabled(context, s2, Intents.getViewEventActivityNotificationIntent(context, esaccount, activeISEventId, eventId)); InstantUpload.ensureSyncEnabled(esaccount); } else { NotificationUtils.cancelInstantShareEnabled(context); } InstantUpload.startMonitoring(context); if(!TextUtils.equals(activeISEventId, s3)) (new Handler(Looper.getMainLooper())).post(new Runnable() { public final void run() { OzViews ozviews = OzViews.getViewForLogging(context); if(!TextUtils.isEmpty(activeISEventId)) EsAnalytics.recordActionEvent(context, esaccount, OzActions.EVENTS_PARTY_MODE_OFF, ozviews); if(!TextUtils.isEmpty(eventId)) EsAnalytics.recordActionEvent(context, esaccount, OzActions.EVENTS_PARTY_MODE_ON, ozviews); } }); } public static long timeUntilInstantShareAllowed(Event event, String userId, long now) { long l2; if(isInstantShareAllowed(event, userId, now)) { l2 = 0L; } else { long l1 = getEventEndTime(event); if(!canAddPhotos(event, userId) || now > l1) l2 = -1L; else l2 = event.getStartTime().getTimeMs().longValue() - 0xa4cb80L - now; } return l2; } public static long timeUntilInstantShareAllowed(PlusEvent plusevent, String s, long l) { long l2; if(isInstantShareAllowed(plusevent, s, l)) { l2 = 0L; } else { long l1 = getEventEndTime(plusevent); if(!canAddPhotos(plusevent, s) || l > l1) l2 = -1L; else l2 = plusevent.getStartTime().getTimeMs().longValue() - 0xa4cb80L - l; } return l2; } public static Cursor getEventActivities(Context context, EsAccount esaccount, String s, String as[]) { long l = 0L; SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); try { l = DatabaseUtils.longForQuery(sqlitedatabase, "SELECT display_time FROM events WHERE event_id = ?", new String[] { s }); } catch (SQLiteDoneException sqlitedoneexception) { // TODO log } String as1[] = new String[2]; as1[0] = s; as1[1] = Long.toString(l); return sqlitedatabase.query("event_activities", as, "event_id = ? AND timestamp >= ?", as1, null, null, "timestamp DESC"); } public static Cursor getEventResolvedPeople(Context context, EsAccount esaccount, String s, String as[]) { return EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase().query("event_people_view", as, "event_id = ?", new String[] { s }, null, null, null); } public static String getEventName(Context context, EsAccount esaccount, String s) { try { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); return DatabaseUtils.stringForQuery(sqlitedatabase, "SELECT name FROM events WHERE event_id = ?", new String[] { s }); } catch (SQLiteDoneException sqlitedoneexception) { return s; } } public static void insertEventHomeList(Context context, EsAccount esaccount, List list, List list1, List list2, List list3) { /*SQLiteDatabase sqlitedatabase; ArrayList arraylist; String s; Set set; int ai[]; sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); arraylist = new ArrayList(); s = esaccount.getGaiaId(); set = getMyEventIds(sqlitedatabase); ai = new int[5]; try { sqlitedatabase.beginTransaction(); insertEventListInTransaction(context, sqlitedatabase, s, list, set, ai, arraylist, list3); insertEventListInTransaction(context, sqlitedatabase, s, list1, set, ai, arraylist, list3); insertEventListInTransaction(context, sqlitedatabase, s, list2, set, ai, arraylist, list3); StringBuilder stringbuilder = new StringBuilder(); String as[] = (String[])set.toArray(new String[0]); stringbuilder.append("event_id IN ("); for(int i = 0; i < as.length; i++) { if(i != 0) stringbuilder.append(','); stringbuilder.append('?'); } stringbuilder.append(')'); sqlitedatabase.delete("events", stringbuilder.toString(), as); ai[3] = as.length; ContentValues contentvalues = new ContentValues(); contentvalues.put("event_list_sync_time", Long.valueOf(System.currentTimeMillis())); sqlitedatabase.update("account_status", contentvalues, null, null); sqlitedatabase.setTransactionSuccessful(); if(EsLog.isLoggable("EsEventData", 3)) Log.d("EsEventData", (new StringBuilder("[INSERT_EVENT_LIST]; ")).append(ai[0]).append(" inserted, ").append(ai[1]).append(" changed, ").append(ai[2]).append(" not changed, ").append(ai[3]).append(" removed, ").append(ai[4]).append(" ignored").toString()); PlusEvent plusevent = getPlusEvent(context, esaccount, InstantUpload.getInstantShareEventId(context)); if(validateInstantShare(context, esaccount, plusevent)) enableInstantShare(context, true, plusevent); Uri uri; for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); context.getContentResolver().notifyChange(uri, null)) uri = (Uri)iterator.next(); context.getContentResolver().notifyChange(EsProvider.ACCOUNT_STATUS_URI, null); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); } finally { sqlitedatabase.endTransaction(); }*/ } private static boolean isMine(Event event, String userId) { return TextUtils.equals(event.getPublisher(), userId); } /** * * @param context * @param esaccount * @param event */ public static void insertEvent(Context context, EsAccount esaccount, Event event) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); try { sqlitedatabase.beginTransaction(); insertEventInTransaction(context, esaccount.getGaiaId(), sqlitedatabase, event); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); } finally { sqlitedatabase.endTransaction(); } } public static void insertEvent(Context context, EsAccount esaccount, String s, PlusEvent plusevent, Update update) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); ArrayList arraylist = new ArrayList(); String s1 = plusevent.getId(); try { sqlitedatabase.beginTransaction(); insertEventInTransaction(context, esaccount.getGaiaId(), sqlitedatabase, s1, s, plusevent, update, arraylist, null, null); sqlitedatabase.setTransactionSuccessful(); if(!TextUtils.isEmpty(s1) && TextUtils.equals(s1, InstantUpload.getInstantShareEventId(context)) && validateInstantShare(context, esaccount, plusevent)) enableInstantShare(context, true, plusevent); Uri uri; for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); context.getContentResolver().notifyChange(uri, null)) uri = (Uri)iterator.next(); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); } finally { sqlitedatabase.endTransaction(); } } public static void insertEventInviteeList(Context context, EsAccount esaccount, String s, List list) { if(EsLog.isLoggable("EsEventData", 3)) { Invitee invitee; for(Iterator iterator = list.iterator(); iterator.hasNext(); Log.d("EsEventData", (new StringBuilder("[INSERT_EVENT_INVITEE]; ")).append(s).append(" ").append(invitee.toJsonString()).toString())) invitee = (Invitee)iterator.next(); } SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); String as[] = { s }; ContentValues contentvalues = new ContentValues(); InviteeList inviteelist = new InviteeList(); inviteelist.invitees = list; contentvalues.put("invitee_roster_timestamp", Long.valueOf(System.currentTimeMillis())); contentvalues.put("invitee_roster", JsonUtil.toByteArray(inviteelist)); insertPeopleInInviteeSummaries(context, s, null, list, sqlitedatabase); sqlitedatabase.update("events", contentvalues, "event_id=?", as); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); } public static void insertEventActivities(Context context, EsAccount esaccount, String s, String s1, List list, boolean flag) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); ArrayList arraylist = new ArrayList(); try { sqlitedatabase.beginTransaction(); insertResumeTokenInTransaction(sqlitedatabase, s, null); if(list != null) insertEventActivitiesInTransaction(context, sqlitedatabase, s, list, true, arraylist); sqlitedatabase.setTransactionSuccessful(); Uri uri; for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); context.getContentResolver().notifyChange(uri, null)) uri = (Uri)iterator.next(); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); } finally { sqlitedatabase.endTransaction(); } } private static void insertResumeTokenInTransaction(SQLiteDatabase sqlitedatabase, String s, String s1) { String as[]; boolean flag; Cursor cursor = null; as = (new String[] { s }); flag = true; try { cursor = sqlitedatabase.query("events", new String[] { "resume_token" }, "event_id=?", as, null, null, null); String s2; String s3; boolean flag1 = cursor.moveToFirst(); s2 = null; if(flag1) s2 = cursor.getString(0); flag = false; cursor.close(); if(!TextUtils.equals(s2, s1)) { ContentValues contentvalues = new ContentValues(); contentvalues.put("resume_token", s1); Exception exception; if(flag) sqlitedatabase.insert("events", null, contentvalues); else sqlitedatabase.update("events", contentvalues, "event_id=?", as); } } finally { if(null != cursor) { cursor.close(); } } } private static void insertEventActivitiesInTransaction(Context context, SQLiteDatabase sqlitedatabase, String s, List list, boolean flag, List list1) { boolean flag1; Cursor cursor = null; String as[] = (new String[] { s }); HashMap hashmap = new HashMap(); flag1 = false; try { cursor = sqlitedatabase.query("event_activities", new String[] { "_id", "type", "owner_gaia_id", "timestamp", "fingerprint" }, "event_id=?", as, null, null, null); while(cursor.moveToNext()) { EventActivityKey eventactivitykey = new EventActivityKey(); EventActivityStatus eventactivitystatus = new EventActivityStatus(); eventactivitystatus.id = cursor.getString(0); eventactivitykey.type = cursor.getInt(1); eventactivitykey.ownerGaiaId = cursor.getString(2); eventactivitykey.timestamp = cursor.getLong(3); eventactivitystatus.fingerprint = cursor.getInt(4); hashmap.put(eventactivitykey, eventactivitystatus); } } finally { if(null != cursor) { cursor.close(); } } ContentValues contentvalues = new ContentValues(); EventActivityKey eventactivitykey1 = new EventActivityKey(); HashMap hashmap1 = new HashMap(); Iterator iterator = list.iterator(); do { if(iterator.hasNext()) { EventActivity eventactivity = (EventActivity)iterator.next(); eventactivitykey1.type = eventactivity.activityType; eventactivitykey1.ownerGaiaId = eventactivity.ownerGaiaId; eventactivitykey1.timestamp = eventactivity.timestamp; EventActivityStatus eventactivitystatus2 = (EventActivityStatus)hashmap.get(eventactivitykey1); int i; String s1; DataPhoto dataphoto; String s2; if(eventactivity.data == null) i = 0; else i = eventactivity.data.hashCode(); if(eventactivity.activityType == 100) { dataphoto = (DataPhoto)JsonUtil.toBean(eventactivity.data, DataPhoto.class); s1 = null; s2 = null; if(dataphoto != null) s2 = dataphoto.original.url; } else { int j = eventactivity.activityType; s1 = null; dataphoto = null; s2 = null; if(j == 5) { EventComment eventcomment = (EventComment)JsonUtil.toBean(eventactivity.data, EventComment.class); s1 = null; dataphoto = null; s2 = null; if(eventcomment != null) { s1 = eventcomment.text; dataphoto = null; s2 = null; } } } if(eventactivitystatus2 == null) { contentvalues.clear(); contentvalues.put("event_id", s); contentvalues.put("type", Integer.valueOf(eventactivity.activityType)); contentvalues.put("timestamp", Long.valueOf(eventactivity.timestamp)); contentvalues.put("owner_gaia_id", eventactivity.ownerGaiaId); contentvalues.put("owner_name", eventactivity.ownerName); contentvalues.put("data", eventactivity.data); contentvalues.put("url", s2); contentvalues.put("comment", s1); contentvalues.put("fingerprint", Integer.valueOf(i)); sqlitedatabase.insert("event_activities", null, contentvalues); } else { int k = eventactivitystatus2.fingerprint; if(i != k) { contentvalues.clear(); contentvalues.put("data", eventactivity.data); contentvalues.put("url", s2); contentvalues.put("comment", s1); contentvalues.put("fingerprint", Integer.valueOf(i)); String as2[] = new String[1]; as2[0] = eventactivitystatus2.id; sqlitedatabase.update("event_activities", contentvalues, "_id=?", as2); } hashmap.remove(eventactivitykey1); } if(eventactivity.activityType == 100) { EsPhotosDataApiary.insertEventPhotoInTransaction(sqlitedatabase, dataphoto, s, hashmap1, list1); flag1 = true; } continue; } if(!flag) { String as1[]; for(Iterator iterator1 = hashmap.values().iterator(); iterator1.hasNext(); sqlitedatabase.delete("event_activities", "_id=?", as1)) { EventActivityStatus eventactivitystatus1 = (EventActivityStatus)iterator1.next(); as1 = new String[1]; as1[0] = eventactivitystatus1.id; } } contentvalues.clear(); contentvalues.put("activity_refresh_timestamp", Long.valueOf(System.currentTimeMillis())); sqlitedatabase.update("events", contentvalues, "event_id=?", as); if(flag1) { Uri uri = Uri.withAppendedPath(EsProvider.PHOTO_BY_EVENT_ID_URI, s); if(list1 != null) list1.add(uri); else context.getContentResolver().notifyChange(uri, null); } return; } while(true); } public static void insertEventThemes(Context context, EsAccount esaccount, List list) { // TODO } public static void updateEventInviteeList(Context context, EsAccount esaccount, String s, boolean flag, String s1, String s2) { PlusEvent plusevent = null; List list = null; Cursor cursor = null; try { cursor = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase().query("events", new String[] { "event_data", "invitee_roster" }, "event_id=?", new String[] { s }, null, null, null); boolean flag1 = cursor.moveToFirst(); if(flag1) { byte abyte1[] = cursor.getBlob(0); byte abyte2[] = cursor.getBlob(1); if(abyte2 != null) { plusevent = (PlusEvent)JsonUtil.fromByteArray(abyte1, PlusEvent.class); list = ((InviteeList)JsonUtil.fromByteArray(abyte2, InviteeList.class)).invitees; } } } finally { if(null != cursor) { cursor.close(); } } if(null == list || null == plusevent) { return; } Iterator iterator = list.iterator(); Invitee invitee; do { boolean flag2 = iterator.hasNext(); invitee = null; if(!flag2) break; Invitee invitee1 = (Invitee)iterator.next(); if(invitee1.getInvitee() == null || !TextUtils.equals(s1, invitee1.getInvitee().getOwnerObfuscatedId()) || !TextUtils.equals(s2, invitee1.getInvitee().getEmail())) continue; invitee = invitee1; break; } while(true); if(invitee != null && (invitee.getIsAdminBlacklisted() == null || invitee.getIsAdminBlacklisted().booleanValue() != flag)) { Boolean boolean1 = Boolean.valueOf(flag); invitee.setIsAdminBlacklisted(boolean1); insertEventInviteeList(context, esaccount, s, list); String s3 = invitee.getRsvpType(); int i = 1 + invitee.getNumAdditionalGuests().intValue(); if(plusevent != null && plusevent.getInviteeSummary() != null) { Iterator iterator1 = plusevent.getInviteeSummary().iterator(); do { if(!iterator1.hasNext()) break; InviteeSummary inviteesummary = (InviteeSummary)iterator1.next(); byte byte0; if(flag) byte0 = -1; else byte0 = 1; if(inviteesummary.getCount() != null && TextUtils.equals(inviteesummary.getRsvpType(), s3)) inviteesummary.setCount(Integer.valueOf(Math.max(inviteesummary.getCount().intValue() + byte0 * i, 0))); } while(true); SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); String as[] = new String[1]; as[0] = plusevent.getId(); byte abyte0[] = JsonUtil.toByteArray(plusevent); ContentValues contentvalues = new ContentValues(); contentvalues.put("event_data", abyte0); sqlitedatabase.update("events", contentvalues, "event_id=?", as); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); } } } public static boolean getEventFromServer(Context context, EsAccount esaccount, String s, String s1) { synchronized(sEventOperationSyncObject) { GetEventOperation geteventoperation = new GetEventOperation(context, esaccount, s, s1, null, null); geteventoperation.start(); if(geteventoperation.hasError()) { geteventoperation.logError("EsEventData"); return false; } return true; } } public static void updateEventActivities(Context context, EsAccount esaccount, String s, PlusEvent plusevent, Update update, String s1, String s2, ArrayList arraylist, boolean flag, long l, List list) { // TODO } public static boolean rsvpForEvent(Context context, EsAccount esaccount, String s, String s1, String s2) { synchronized(sEventOperationSyncObject) { PlusEvent plusevent = getPlusEvent(context, esaccount, s); String s3 = setRsvpType(context, esaccount, s, s1); if(plusevent != null && s3 == null) { return false; } SendEventRsvpOperation sendeventrsvpoperation = new SendEventRsvpOperation(context, esaccount, s, s2, s1, s3, null, null); sendeventrsvpoperation.start(); return !sendeventrsvpoperation.hasError(); } } public static String setRsvpType(Context context, EsAccount esaccount, String s, String s1) { /*boolean flag; String s2; Cursor cursor = null; PlusEvent plusevent = null; String s3; flag = "CHECKIN".equals(s1); boolean flag1; if(flag) s2 = "UNDO_CHECKIN"; else s2 = "NOT_RESPONDED"; SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); try { cursor = sqlitedatabase.query("events", EVENT_QUERY_PROJECTION, "event_id=?", new String[] { s }, null, null, null); if(cursor.moveToNext()) plusevent = (PlusEvent)JsonUtil.fromByteArray(cursor.getBlob(0), PlusEvent.class); if(plusevent == null) { context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); return s2; } if(plusevent.getIsPublic() != null && plusevent.getIsPublic().booleanValue() || isMine(plusevent, esaccount.getGaiaId()) || !TextUtils.isEmpty(plusevent.getAuthKey())) { if(plusevent.getInviteeSummary() != null) { boolean flag2 = false; Iterator iterator = plusevent.getInviteeSummary().iterator(); do { if(!iterator.hasNext()) break; InviteeSummary inviteesummary1 = (InviteeSummary)iterator.next(); if(inviteesummary1.getRsvpType() != null) { boolean flag3; if(inviteesummary1.getSetByViewer() != null && inviteesummary1.getSetByViewer().booleanValue()) flag3 = true; else flag3 = false; if(flag3 && !flag) s2 = inviteesummary1.getRsvpType(); if(s1.equals(inviteesummary1.getRsvpType())) { flag2 = true; if(!flag3) { inviteesummary1.setSetByViewer(Boolean.valueOf(true)); int i; if(inviteesummary1.getCount() == null) i = 1; else i = 1 + inviteesummary1.getCount().intValue(); inviteesummary1.setCount(Integer.valueOf(i)); } } else if(flag3) { boolean flag4 = true; if(inviteesummary1.getRsvpType().equals("CHECKIN")) flag4 = "UNDO_CHECKIN".equals(s1); if(flag4) { inviteesummary1.setSetByViewer(Boolean.valueOf(false)); if(inviteesummary1.getCount() != null) { inviteesummary1.setCount(Integer.valueOf(-1 + inviteesummary1.getCount().intValue())); if(inviteesummary1.getCount().intValue() == 0) iterator.remove(); } } } } } while(true); if(!flag2) { InviteeSummary inviteesummary = new InviteeSummary(); inviteesummary.setRsvpType(s1); inviteesummary.setCount(Integer.valueOf(1)); inviteesummary.setSetByViewer(Boolean.valueOf(true)); plusevent.getInviteeSummary().add(0, inviteesummary); } } setViewerInfoRsvp(plusevent, esaccount, s1); ContentValues contentvalues = new ContentValues(); contentvalues.put("event_data", JsonUtil.toByteArray(plusevent)); contentvalues.put("refresh_timestamp", Long.valueOf(System.currentTimeMillis())); sqlitedatabase.update("events", contentvalues, "event_id=?", new String[] { s }); context.getContentResolver().notifyChange(EsProvider.EVENTS_ALL_URI, null); return s2; } else { return null; } } finally { if(null != cursor) { cursor.close(); } }*/ return null; } /** * * @param context * @param userId * @param sqlitedatabase * @param event * @return */ static boolean insertEventInTransaction(Context context, String userId, SQLiteDatabase sqlitedatabase, Event event) { boolean isNew = true; Cursor cursor = null; try { int fingerPrint = 0; int source = 0; int canComment = 0; cursor = sqlitedatabase.query("events", new String[] {"fingerprint", "source", "can_comment"}, "event_id=?", new String[] {event.get_id()}, null, null, null); if(cursor.moveToFirst()) { isNew = false; fingerPrint = cursor.getInt(0); source = cursor.getInt(1); canComment = cursor.getInt(2); } // byte[] bytes = JsonUtil.toByteArray(event); int newfingerPrint = Arrays.hashCode(bytes); if(newfingerPrint != fingerPrint) { ContentValues contentvalues = new ContentValues(); contentvalues.put("refresh_timestamp", Long.valueOf(System.currentTimeMillis())); contentvalues.put("name", event.getName()); contentvalues.put("event_data", bytes); contentvalues.put("mine", Boolean.valueOf(isMine(event, userId))); // FIXME contentvalues.put("can_invite_people", Boolean.valueOf(true)); contentvalues.put("can_post_photos", Boolean.valueOf(true)); contentvalues.put("can_comment", Boolean.valueOf(true)); contentvalues.put("start_time", Long.valueOf(event.getStartTime().getTimeMs().longValue())); contentvalues.put("end_time", Long.valueOf(event.getEndTime().getTimeMs().longValue())); contentvalues.put("fingerprint", Integer.valueOf(newfingerPrint)); if (isNew) { contentvalues.put("event_id", event.get_id()); sqlitedatabase.insert("events", null, contentvalues); } else { sqlitedatabase.update("events", contentvalues, "event_id=?", new String[] { event.get_id() }); } } } finally { if(null != cursor) { cursor.close(); } } insertReferencedPeopleInTransaction(context, event, sqlitedatabase); return true; } private static void insertReferencedPeopleInTransaction(Context context, Event event, SQLiteDatabase sqlitedatabase) { String eventId = event.get_id(); } private static boolean insertEventInTransaction(Context context, String s, SQLiteDatabase sqlitedatabase, String s1, String s2, PlusEvent plusevent, Update update, List list, Long long1, List list1) { return insertEventInTransaction(context, s, sqlitedatabase, s1, s2, plusevent, update, long1, list1, 1); } static boolean insertEventInTransaction(Context context, String s, SQLiteDatabase sqlitedatabase, String s1, String s2, PlusEvent plusevent, Update update, Long long1, List list, int i) { /*long l; boolean flag; Cursor cursor; l = System.currentTimeMillis(); flag = true; cursor = sqlitedatabase.query("events", new String[] { "fingerprint", "source", "can_comment" }, "event_id=?", new String[] { s1 }, null, null, null); boolean flag1; int j; boolean flag2; boolean flag6; flag1 = cursor.moveToFirst(); j = 0; flag2 = false; boolean flag7; if(flag1) { int i1; int j1; j = cursor.getInt(0); i1 = cursor.getInt(1); j1 = cursor.getInt(2); if(j1 != 0) flag2 = true; else flag2 = false; flag = false; if(i1 == 1) { flag = false; if(i == 0) { return false; } } } byte abyte0[]; int k; ContentValues contentvalues; cursor.close(); abyte0 = JsonUtil.toByteArray(plusevent); k = Arrays.hashCode(abyte0); contentvalues = new ContentValues(); contentvalues.put("source", Integer.valueOf(i)); if(!flag && j == k) { flag6 = false; if(s2 != null) { contentvalues.put("activity_id", s2); sqlitedatabase.update("events", contentvalues, "event_id=?", new String[] { s1 }); flag6 = false; } } else { contentvalues.put("refresh_timestamp", Long.valueOf(l)); contentvalues.put("name", plusevent.getName()); contentvalues.put("event_data", abyte0); contentvalues.put("mine", Boolean.valueOf(isMine(plusevent, s))); boolean flag3; boolean flag4; boolean flag5; long l1; if(s.equals(plusevent.getCreatorObfuscatedId()) || plusevent.getEventOptions() != null && plusevent.getEventOptions().getOpenPhotoAcl() != null && plusevent.getEventOptions().getOpenPhotoAcl().booleanValue()) flag3 = true; else flag3 = false; contentvalues.put("can_invite_people", Boolean.valueOf(flag3)); if(s.equals(plusevent.getCreatorObfuscatedId()) || plusevent.getEventOptions() != null && plusevent.getEventOptions().getOpenPhotoAcl() != null && plusevent.getEventOptions().getOpenPhotoAcl().booleanValue()) flag4 = true; else flag4 = false; contentvalues.put("can_post_photos", Boolean.valueOf(flag4)); if(update != null) flag5 = PrimitiveUtils.safeBoolean(update.canViewerComment); else flag5 = flag2; contentvalues.put("can_comment", Boolean.valueOf(flag5)); if(plusevent.getStartTime() != null) l1 = plusevent.getStartTime().getTimeMs().longValue(); else l1 = l; contentvalues.put("start_time", Long.valueOf(l1)); contentvalues.put("end_time", Long.valueOf(getEventEndTime(plusevent))); contentvalues.put("fingerprint", Integer.valueOf(k)); if(flag || s2 != null) contentvalues.put("activity_id", s2); if(long1 != null) contentvalues.put("display_time", long1); if(flag) { contentvalues.put("event_id", s1); sqlitedatabase.insert("events", null, contentvalues); } else { sqlitedatabase.update("events", contentvalues, "event_id=?", new String[] { s1 }); } flag6 = true; } if(EsLog.isLoggable("EsEventData", 3)) { Log.d("EsEventData", (new StringBuilder("[INSERT_EVENT], duration: ")).append(System.currentTimeMillis() - l).append("ms").toString()); StringBuilder stringbuilder = new StringBuilder(); String s3 = stringbuilder.toString(); stringbuilder.setLength(0); StringBuilder stringbuilder1 = stringbuilder.append(s3).append("EVENT [id: ").append(plusevent.getId()).append(", owner: "); String s4; if(plusevent.getCreatorObfuscatedId() == null) s4 = "N/A"; else s4 = plusevent.getCreatorObfuscatedId(); stringbuilder1.append(s4); CharSequence charsequence = DateFormat.format("MMM dd, yyyy h:mmaa", new Date(plusevent.getStartTime().getTimeMs().longValue())); stringbuilder.append(", start: ").append(charsequence); if(plusevent.getEndTime() != null && plusevent.getEndTime().getTimeMs() != null) { CharSequence charsequence1 = DateFormat.format("MMM dd, yyyy h:mmaa", new Date(plusevent.getEndTime().getTimeMs().longValue())); stringbuilder.append(", end: ").append(charsequence1); } stringbuilder.append(", \n").append(s3).append(" title: ").append(plusevent.getName()); stringbuilder.append("]"); stringbuilder.append("\n"); stringbuilder.append("\n"); EsLog.writeToLog(3, "EsEventData", stringbuilder.toString()); } insertReferencedPeopleInTransaction(context, plusevent, list, sqlitedatabase); flag7 = flag6; return flag7;*/ return true; } private static void insertReferencedPeopleInTransaction(Context context, PlusEvent plusevent, List list, SQLiteDatabase sqlitedatabase) { String s = plusevent.getId(); insertMentionedPersonInTransaction(context, s, plusevent.getCreator(), list, sqlitedatabase); if(plusevent.getInviteeSummary() != null) { for(Iterator iterator = plusevent.getInviteeSummary().iterator(); iterator.hasNext(); insertPeopleInInviteeSummaries(context, s, list, ((InviteeSummary)iterator.next()).getInvitee(), sqlitedatabase)); } } private static void insertMentionedPersonInTransaction(Context context, String s, EmbedsPerson embedsperson, List list, SQLiteDatabase sqlitedatabase) { boolean flag = false; if(embedsperson != null) { flag = false; if(list != null) { String s1 = embedsperson.getOwnerObfuscatedId(); flag = false; if(s1 != null) { for(int i = 0; i < list.size() && !flag; i++) { EmbedsPerson embedsperson1 = (EmbedsPerson)list.get(i); if(TextUtils.equals(embedsperson1.getOwnerObfuscatedId(), embedsperson.getOwnerObfuscatedId())) { insertPersonInTransaction(s, embedsperson1.getOwnerObfuscatedId(), embedsperson1.getName(), embedsperson1.getImageUrl(), sqlitedatabase); flag = true; } } } } } if(!flag && embedsperson != null && embedsperson.getOwnerObfuscatedId() != null && embedsperson.getImageUrl() != null) insertPersonInTransaction(s, embedsperson.getOwnerObfuscatedId(), embedsperson.getName(), embedsperson.getImageUrl(), sqlitedatabase); } private static void insertPersonInTransaction(String s, String s1, String s2, String s3, SQLiteDatabase sqlitedatabase) { if(null == s1 || null == s3) { return; } String as[]; boolean flag = true; as = (new String[] { s, s1 }); try { DatabaseUtils.longForQuery(sqlitedatabase, "SELECT event_id FROM event_people WHERE event_id=? AND gaia_id=?", as); flag = false; } catch (SQLiteDoneException sqlitedoneexception) { flag = true; } if(flag) { ContentValues contentvalues = new ContentValues(); contentvalues.put("event_id", s); contentvalues.put("gaia_id", s1); sqlitedatabase.insert("event_people", null, contentvalues); } EsPeopleData.replaceUserInTransaction(sqlitedatabase, s1, s2, s3); } private static void insertPeopleInInviteeSummaries(Context context, String s, List list, List list1, SQLiteDatabase sqlitedatabase) { if(list1 != null) { Invitee invitee; for(Iterator iterator = list1.iterator(); iterator.hasNext(); insertMentionedPersonInTransaction(context, s, invitee.getInviter(), list, sqlitedatabase)) { invitee = (Invitee)iterator.next(); insertMentionedPersonInTransaction(context, s, invitee.getInvitee(), list, sqlitedatabase); } } } private static void setViewerInfoRsvp(PlusEvent plusevent, EsAccount esaccount, String s) { if(plusevent != null) { if(plusevent.getViewerInfo() == null) { plusevent.setViewerInfo(new Invitee()); plusevent.getViewerInfo().setInvitee(new EmbedsPerson()); plusevent.getViewerInfo().getInvitee().setOwnerObfuscatedId(esaccount.getGaiaId()); } plusevent.getViewerInfo().setRsvpType(s); } } private static void ensureFreshEventThemes(Context context, EsAccount esaccount, EsSyncAdapterService.SyncState syncstate) { if(syncstate != null && syncstate.isCanceled()) return; synchronized(sEventThemesLock) { long l = -1; try { l = DatabaseUtils.longForQuery(EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(), "SELECT event_themes_sync_time FROM account_status", null); } catch (SQLiteDoneException sqlitedoneexception) { // TODO log } if(System.currentTimeMillis() - l > 0x5265c00L) { GetEventThemesOperation geteventthemesoperation = new GetEventThemesOperation(context, esaccount, null, null); geteventthemesoperation.start(); if(geteventthemesoperation.hasError()) geteventthemesoperation.logError("EsEventData"); } } } public static boolean validateInstantShare(Context context, EsAccount esaccount) { return validateInstantShare(context, esaccount, getPlusEvent(context, esaccount, InstantUpload.getInstantShareEventId(context))); } private static boolean validateInstantShare(Context context, EsAccount esaccount, PlusEvent plusevent) { boolean flag = false; if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#validateInstantShare; now: ")).append(System.currentTimeMillis()).toString()); if(esaccount == null || plusevent == null) { flag = false; } else { String s = esaccount.getGaiaId(); boolean flag1 = esaccount.isPlusPage(); String s1 = plusevent.getId(); AlarmManager alarmmanager = (AlarmManager)context.getSystemService("alarm"); alarmmanager.cancel(Intents.getEventFinishedIntent(context, null)); long l = System.currentTimeMillis(); boolean flag2 = EsLog.isLoggable("EsEventData", 4); flag = false; if(flag2) Log.i("EsEventData", (new StringBuilder("#validateInstantShare; cur event: ")).append(plusevent.getId()).toString()); flag = false; if(!flag1) { boolean flag3 = isInstantShareAllowed(plusevent, s, l); flag = false; if(flag3) { android.app.PendingIntent pendingintent = Intents.getViewEventActivityNotificationIntent(context, esaccount, s1, plusevent.getCreatorObfuscatedId()); NotificationUtils.notifyInstantShareEnabled(context, plusevent.getName(), pendingintent, false); long l1 = getEventEndTime(plusevent); alarmmanager.set(0, l1, Intents.getEventFinishedIntent(context, s1)); flag = true; if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", (new StringBuilder("#validateInstantShare; keep IS; now: ")).append(l).append(", end: ").append(l1).append(", wake in: ").append(l1 - l).toString()); if(EsLog.isLoggable("EsEventData", 4)) { StringBuilder stringbuilder = new StringBuilder("Enable Instant Share; now: "); Date date = new Date(l); StringBuilder stringbuilder1 = stringbuilder.append(DateFormat.format("MMM dd, yyyy h:mmaa", date)).append(", alarm: "); Date date1 = new Date(l1); Log.i("EsEventData", stringbuilder1.append(DateFormat.format("MMM dd, yyyy h:mmaa", date1)).toString()); } } } } if(!flag) { disableInstantShare(context); NotificationUtils.cancelInstantShareEnabled(context); if(EsLog.isLoggable("EsEventData", 4)) Log.i("EsEventData", "Disable Instant Share"); } return flag; } public static boolean isInstantShareAllowed(Event event, String userId, long now) { // FIXME return true; } public static boolean isInstantShareAllowed(PlusEvent plusevent, String userId, long now) { boolean flag = true; boolean flag1 = canAddPhotos(plusevent, userId); boolean flag2; long l1; long l2; if(plusevent.getViewerInfo() != null && plusevent.getViewerInfo().getRsvpType() != null) flag2 = flag; else flag2 = false; l1 = plusevent.getStartTime().getTimeMs().longValue() - 0xa4cb80L; l2 = getEventEndTime(plusevent) - 5000L; if(!flag1 || !flag2 || now <= l1 || now >= l2) flag = false; return flag; } public static void refreshEvent(final Context context, final EsAccount esaccount, final String eventId) { EsService.postOnUiThread(new Runnable() { public final void run() { EsService.getEvent(context, esaccount, eventId); } }); } public static class EventActivity { public int activityType; public String data; public String ownerGaiaId; public String ownerName; public long timestamp; } private static final class EventActivityKey { public final boolean equals(Object obj) { EventActivityKey eventactivitykey = (EventActivityKey)obj; boolean flag; if(type == eventactivitykey.type && TextUtils.equals(ownerGaiaId, eventactivitykey.ownerGaiaId) && timestamp == eventactivitykey.timestamp) flag = true; else flag = false; return flag; } public final int hashCode() { int i = type; int j; if(ownerGaiaId == null) j = 0; else j = ownerGaiaId.hashCode(); return (int)((long)(j + i) + timestamp); } public String ownerGaiaId; public long timestamp; public int type; } public static HttpOperation readEventFromServer(Context context, EsAccount esaccount, String s, String s1, String s2, String s3, String s4, boolean flag, boolean flag1, EsSyncAdapterService.SyncState syncstate, HttpTransactionMetrics httptransactionmetrics) { synchronized(sEventOperationSyncObject) { EventReadOperation eventreadoperation = null; if(flag1) { eventreadoperation = new EventReadOperation(context, esaccount, s, s3, flag, null, null); } else { eventreadoperation = new EventReadOperation(context, esaccount, s, s1, s2, s3, s4, flag, null, null); } if(syncstate != null && httptransactionmetrics != null) eventreadoperation.start(syncstate, httptransactionmetrics); else eventreadoperation.start(); if(eventreadoperation.hasError()) eventreadoperation.logError("EsEventData"); return eventreadoperation; } } public static boolean updateDataPhoto(Context context, EsAccount esaccount, String s, String s1, long l, String s2) { GetPhotoOperation getphotooperation = new GetPhotoOperation(context, esaccount, null, null, l, s2); getphotooperation.start(); if(!getphotooperation.hasError()) { DataPhoto dataphoto = getphotooperation.getDataPhoto(); ContentValues contentvalues = new ContentValues(); contentvalues.put("data", dataphoto.toJsonString()); EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase().update("event_activities", contentvalues, "event_id=? AND fingerprint=?", new String[] { s, s1 }); } return true; } public static long getDisplayTime(Context context, EsAccount esaccount, PlusEvent plusevent) { if(null == plusevent) { return 0L; } Cursor cursor = null; SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); String as[] = new String[1]; as[0] = plusevent.getId(); try { cursor = sqlitedatabase.query("events", new String[] { "display_time" }, "event_id=?", as, null, null, null); if(cursor.moveToFirst()) { return cursor.getLong(0); } return 0L; } finally { if(null != cursor) { cursor.close(); } } } private static final class EventActivityStatus { public int fingerprint; public String id; } public static class EventCoalescedFrame extends GenericJson { public List people; public List getPeople() { return people; } public void setPeople(List people) { this.people = people; } } public static class EventComment extends GenericJson { public String commentId; public boolean ownedByViewer; public String text; public long totalPlusOnes; public String getCommentId() { return commentId; } public void setCommentId(String commentId) { this.commentId = commentId; } public boolean isOwnedByViewer() { return ownedByViewer; } public void setOwnedByViewer(boolean ownedByViewer) { this.ownedByViewer = ownedByViewer; } public String getText() { return text; } public void setText(String text) { this.text = text; } public long getTotalPlusOnes() { return totalPlusOnes; } public void setTotalPlusOnes(long totalPlusOnes) { this.totalPlusOnes = totalPlusOnes; } } public static class EventPerson extends GenericJson { public String gaiaId; public String name; public int numAdditionalGuests; public String getGaiaId() { return gaiaId; } public void setGaiaId(String gaiaId) { this.gaiaId = gaiaId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNumAdditionalGuests() { return numAdditionalGuests; } public void setNumAdditionalGuests(int numAdditionalGuests) { this.numAdditionalGuests = numAdditionalGuests; } } public static class InviteeList extends GenericJson { public List invitees; public List getInvitees() { return invitees; } public void setInvitees(List invitees) { this.invitees = invitees; } } public static final class ResolvedPerson { public String avatarUrl; public String gaiaId; public String name; public ResolvedPerson(String s, String s1, String s2) { name = s; gaiaId = s1; avatarUrl = s2; } public String getAvatarUrl() { return avatarUrl; } public void setAvatarUrl(String avatarUrl) { this.avatarUrl = avatarUrl; } public String getGaiaId() { return gaiaId; } public void setGaiaId(String gaiaId) { this.gaiaId = gaiaId; } public String getName() { return name; } public void setName(String name) { this.name = name; } } private static final class ThemeStatus { String imageUrl; boolean isDefault; boolean isFeatured; String placeholderPath; int sortOrder; } }