/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.content; import java.io.IOException; import java.util.List; 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.text.TextUtils; import android.util.Log; import com.galaxy.meetup.client.util.EsLog; import com.galaxy.meetup.client.util.PrimitiveUtils; import com.galaxy.meetup.client.util.StringUtils; import com.galaxy.meetup.server.client.domain.SquareMember; import com.galaxy.meetup.server.client.domain.SquareNotificationOptions; import com.galaxy.meetup.server.client.domain.SquareProfile; import com.galaxy.meetup.server.client.domain.SquareStream; import com.galaxy.meetup.server.client.domain.ViewerSquare; import com.galaxy.meetup.server.client.domain.ViewerSquareCalculatedMembershipProperties; import com.galaxy.meetup.server.client.domain.ViewerSquareSquareActivityStats; import com.galaxy.meetup.server.client.domain.ViewerSquareStreamList; /** * * @author sihai * */ public class EsSquaresData { public static final String SQUARES_PROJECTION[] = { "square_id", "square_name", "tagline", "photo_url", "about_text", "joinability", "member_count", "membership_status", "is_member", "suggested", "post_visibility", "can_see_members", "can_see_posts", "can_join", "can_request_to_join", "can_share", "can_invite", "notifications_enabled", "square_streams", "sort_index", "inviter_gaia_id", "last_sync", "last_members_sync", "auto_subscribe", "disable_subscription", "unread_count" }; private static final String SQUARE_MEMBERS_PROJECTION[] = { "link_person_id", "membership_status" }; private static final String UPDATE_SQUARE_MEMBERSHIP_PROJECTION[] = { "post_visibility", "joinability", "square_streams" }; static void cleanupData(SQLiteDatabase sqlitedatabase) { sqlitedatabase.delete("squares", "is_member=0 AND membership_status NOT IN (4,5)", null); } private static void deleteSquareStreams(Context context, EsAccount esaccount, String s, DbSquareStream adbsquarestream[]) { if(adbsquarestream != null) { int i = 0; for(int j = adbsquarestream.length; i < j; i++) EsPostsData.deleteActivityStream(context, esaccount, EsPostsData.buildSquareStreamKey(s, adbsquarestream[i].getStreamId(), false)); } EsPostsData.deleteActivityStream(context, esaccount, EsPostsData.buildSquareStreamKey(s, null, false)); } public static void dismissSquareInvitation(Context context, EsAccount esaccount, String s) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase(); ContentValues contentvalues = new ContentValues(); contentvalues.put("invitation_dismissed", Integer.valueOf(1)); if(sqlitedatabase.update("squares", contentvalues, "square_id=?", new String[] {s}) > 0) context.getContentResolver().notifyChange(EsProvider.SQUARES_URI, null); } public static Cursor getInvitedSquares(Context context, EsAccount esaccount, String as[], String s) { android.net.Uri uri = EsProvider.appendAccountParameter(EsProvider.SQUARES_URI, esaccount); ContentResolver contentresolver = context.getContentResolver(); String as1[] = new String[1]; as1[0] = String.valueOf(5); return contentresolver.query(uri, as, "membership_status=? AND is_member=0 AND invitation_dismissed=0", as1, null); } private static int getJoinability(String s) { int i; if("ANYONE".equals(s)) i = 0; else if("REQUIRES_APPROVAL".equals(s)) i = 1; else if("REQUIRES_INVITE".equals(s)) i = 2; else i = -1; return i; } public static Cursor getJoinedSquares(Context context, EsAccount esaccount, String as[], String s) { android.net.Uri uri = EsProvider.appendAccountParameter(EsProvider.SQUARES_URI, esaccount); return context.getContentResolver().query(uri, as, "is_member!=0", null, s); } private static int getMembershipStatus(String s) { int i; if("NONE".equals(s)) i = 0; else if("OWNER".equals(s)) i = 1; else if("MODERATOR".equals(s)) i = 2; else if("MEMBER".equals(s)) i = 3; else if("PENDING".equals(s)) i = 4; else if("INVITED".equals(s)) i = 5; else if("BANNED".equals(s)) i = 6; else if("IGNORED".equals(s)) i = 7; else i = -1; return i; } public static Cursor getSuggestedSquares(Context context, EsAccount esaccount, String as[], String s) { android.net.Uri uri = EsProvider.appendAccountParameter(EsProvider.SQUARES_URI, esaccount); return context.getContentResolver().query(uri, as, "suggested!=0 AND is_member=0", null, "suggestion_sort_index"); } private static int getVisibility(String s) { int i; if("PUBLIC".equals(s)) i = 0; else if("MEMBERS_ONLY".equals(s)) i = 1; else i = -1; return i; } private static boolean hasSquareChanged(Cursor cursor, ViewerSquare viewersquare) { int j; int l; int i1; boolean flag; boolean flag1; boolean flag2; boolean flag3; boolean flag4; boolean flag5; boolean flag6; boolean flag7; boolean flag8; boolean flag9; DbSquareStream adbsquarestream[]; boolean flag10; String s = cursor.getString(1); String s1 = cursor.getString(2); String s2 = cursor.getString(3); String s3 = cursor.getString(4); int i = cursor.getInt(5); j = cursor.getInt(6); int k = cursor.getInt(7); l = cursor.getInt(10); i1 = cursor.getInt(25); SquareProfile squareprofile; if(cursor.getInt(8) != 0) flag = true; else flag = false; if(cursor.getInt(11) != 0) flag1 = true; else flag1 = false; if(cursor.getInt(12) != 0) flag2 = true; else flag2 = false; if(cursor.getInt(13) != 0) flag3 = true; else flag3 = false; if(cursor.getInt(14) != 0) flag4 = true; else flag4 = false; if(cursor.getInt(15) != 0) flag5 = true; else flag5 = false; if(cursor.getInt(16) != 0) flag6 = true; else flag6 = false; if(cursor.getInt(17) != 0) flag7 = true; else flag7 = false; if(cursor.getInt(23) != 0) flag8 = true; else flag8 = false; if(cursor.getInt(24) != 0) flag9 = true; else flag9 = false; adbsquarestream = DbSquareStream.deserialize(cursor.getBlob(18)); squareprofile = viewersquare.square.profile; if(StringUtils.equals(s, squareprofile.name) && StringUtils.equals(s1, squareprofile.tagline) && StringUtils.equals(s2, squareprofile.photoUrl) && StringUtils.equals(s3, squareprofile.aboutText) && k == getMembershipStatus(viewersquare.viewerMembershipStatus) && i == getJoinability(viewersquare.square.joinability)) { ViewerSquareCalculatedMembershipProperties viewersquarecalculatedmembershipproperties = viewersquare.calculatedMembershipProperties; if(viewersquarecalculatedmembershipproperties != null && (flag != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.isMember) || flag1 != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canSeeMemberList) || flag2 != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canSeePosts) || flag3 != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canJoin) || flag4 != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canRequestToJoin) || flag5 != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canShareSquare) || flag6 != PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canInviteToSquare))) { return true; } if(viewersquare.square.visibility != null && l != getVisibility(viewersquare.square.visibility.posts)) { return true; } if(!TextUtils.isEmpty(viewersquare.viewerNotificationSettings)) { boolean flag12 = "ENABLED".equals(viewersquare.viewerNotificationSettings); if(flag7 != flag12) { return true; } } if(viewersquare.squareMemberStats != null && j != PrimitiveUtils.safeInt(viewersquare.squareMemberStats.memberCount)) { return true; } if(viewersquare.streams == null) { SquareNotificationOptions squarenotificationoptions = viewersquare.squareNotificationOptions; if(squarenotificationoptions != null && (flag8 != PrimitiveUtils.safeBoolean(squarenotificationoptions.autoSubscribeOnJoin) || flag9 != PrimitiveUtils.safeBoolean(squarenotificationoptions.disableSubscription))) { flag10 = true; } else { ViewerSquareSquareActivityStats viewersquaresquareactivitystats = viewersquare.squareActivityStats; if(viewersquaresquareactivitystats != null && i1 != PrimitiveUtils.safeInt(viewersquaresquareactivitystats.unreadPostCount)) flag10 = true; else flag10 = false; } return flag10; } else { ViewerSquareStreamList viewersquarestreamlist = viewersquare.streams; if(viewersquarestreamlist != null && viewersquarestreamlist.squareStream != null && viewersquarestreamlist.squareStream.size() != 0) { if(adbsquarestream == null) { return false; } List list = viewersquarestreamlist.squareStream; if(list.size() != adbsquarestream.length) { return false; } int j1 = adbsquarestream.length; int k1 = 0; int l1 = 0; do { if(l1 >= j1) break; DbSquareStream dbsquarestream = adbsquarestream[l1]; int i2 = k1 + 1; SquareStream squarestream = (SquareStream)list.get(k1); if(!StringUtils.equals(dbsquarestream.getStreamId(), squarestream.id) || !StringUtils.equals(dbsquarestream.getName(), squarestream.name) || !StringUtils.equals(dbsquarestream.getDescription(), squarestream.description)) { return false; } l1++; k1 = i2; } while(true); return true; } else { boolean flag11; if(adbsquarestream == null || adbsquarestream.length == 0) flag11 = true; else flag11 = false; if(flag11) { return false; } return true; } } } else { return true; } } public static boolean insertSquare(Context context, EsAccount esaccount, ViewerSquare viewersquare) throws IOException { // TODO return false; } public static int insertSquares(Context context, EsAccount esaccount, List list, List list1, List list2) throws IOException { // TODO return 0; } public static long queryLastSquaresSyncTimestamp(Context context, EsAccount esaccount) { SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase(); try { return DatabaseUtils.longForQuery(sqlitedatabase, "SELECT last_squares_sync_time FROM account_status", null); } catch (SQLiteDoneException sqlitedoneexception) { return -1L; } } private static ContentValues toContentValues(SquareData squaredata) throws IOException { ContentValues contentvalues = toContentValues(squaredata.viewerSquare); contentvalues.put("inviter_gaia_id", squaredata.getInviterGaiaId()); int i; if(squaredata.suggested) i = 1; else i = 0; contentvalues.put("suggested", Integer.valueOf(i)); contentvalues.put("sort_index", Integer.valueOf(squaredata.sortIndex)); contentvalues.put("suggestion_sort_index", Integer.valueOf(squaredata.suggestionSortIndex)); return contentvalues; } private static ContentValues toContentValues(ViewerSquare viewersquare) throws IOException { List list; int i1; SquareStream squarestream; SquareProfile squareprofile = viewersquare.square.profile; ViewerSquareCalculatedMembershipProperties viewersquarecalculatedmembershipproperties = viewersquare.calculatedMembershipProperties; int i = getMembershipStatus(viewersquare.viewerMembershipStatus); ContentValues contentvalues = new ContentValues(); contentvalues.put("square_id", viewersquare.square.obfuscatedGaiaId); contentvalues.put("square_name", squareprofile.name); contentvalues.put("tagline", squareprofile.tagline); contentvalues.put("photo_url", squareprofile.photoUrl); contentvalues.put("about_text", squareprofile.aboutText); contentvalues.put("joinability", Integer.valueOf(getJoinability(viewersquare.square.joinability))); contentvalues.put("membership_status", Integer.valueOf(i)); if(viewersquare.square.visibility != null) contentvalues.put("post_visibility", Integer.valueOf(getVisibility(viewersquare.square.visibility.posts))); if(viewersquarecalculatedmembershipproperties != null) { int k1; int l1; int i2; int j2; int k2; int l2; int i3; if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.isMember)) k1 = 1; else k1 = 0; contentvalues.put("is_member", Integer.valueOf(k1)); if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canSeeMemberList)) l1 = 1; else l1 = 0; contentvalues.put("can_see_members", Integer.valueOf(l1)); if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canSeePosts)) i2 = 1; else i2 = 0; contentvalues.put("can_see_posts", Integer.valueOf(i2)); if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canJoin)) j2 = 1; else j2 = 0; contentvalues.put("can_join", Integer.valueOf(j2)); if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canRequestToJoin)) k2 = 1; else k2 = 0; contentvalues.put("can_request_to_join", Integer.valueOf(k2)); if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canShareSquare)) l2 = 1; else l2 = 0; contentvalues.put("can_share", Integer.valueOf(l2)); if(PrimitiveUtils.safeBoolean(viewersquarecalculatedmembershipproperties.canInviteToSquare)) i3 = 1; else i3 = 0; contentvalues.put("can_invite", Integer.valueOf(i3)); } else { int j; if(i == 3 || i == 2 || i == 1) j = 1; else j = 0; contentvalues.put("is_member", Integer.valueOf(j)); } if(viewersquare.squareMemberStats != null) contentvalues.put("member_count", Integer.valueOf(PrimitiveUtils.safeInt(viewersquare.squareMemberStats.memberCount))); if(!TextUtils.isEmpty(viewersquare.viewerNotificationSettings)) { int j1; if("ENABLED".equals(viewersquare.viewerNotificationSettings)) j1 = 1; else j1 = 0; contentvalues.put("notifications_enabled", Integer.valueOf(j1)); } if(viewersquare.streams != null && viewersquare.streams.squareStream != null) { list = viewersquare.streams.squareStream; DbSquareStream adbsquarestream[] = new DbSquareStream[list.size()]; for(i1 = 0; i1 < adbsquarestream.length; i1++) { squarestream = (SquareStream)list.get(i1); adbsquarestream[i1] = new DbSquareStream(squarestream.id, squarestream.name, squarestream.description); } contentvalues.put("square_streams", DbSquareStream.serialize(adbsquarestream)); } SquareNotificationOptions squarenotificationoptions = viewersquare.squareNotificationOptions; if(squarenotificationoptions != null) { ViewerSquareSquareActivityStats viewersquaresquareactivitystats; int k; int l; if(PrimitiveUtils.safeBoolean(squarenotificationoptions.autoSubscribeOnJoin)) k = 1; else k = 0; contentvalues.put("auto_subscribe", Integer.valueOf(k)); if(PrimitiveUtils.safeBoolean(squarenotificationoptions.disableSubscription)) l = 1; else l = 0; contentvalues.put("disable_subscription", Integer.valueOf(l)); } ViewerSquareSquareActivityStats viewersquaresquareactivitystats = viewersquare.squareActivityStats; if(viewersquaresquareactivitystats != null) contentvalues.put("unread_count", Integer.valueOf(PrimitiveUtils.safeInt(viewersquaresquareactivitystats.unreadPostCount))); return contentvalues; } public static void updateSquareMembership(Context context, EsAccount esaccount, String s, String s1) { // TODO } private static boolean validateSquare(ViewerSquare viewersquare) { boolean flag; if(viewersquare != null && viewersquare.square != null && viewersquare.square.profile != null && !TextUtils.isEmpty(viewersquare.square.obfuscatedGaiaId)) { flag = true; } else { if(EsLog.isLoggable("EsSquaresData", 6)) Log.e("EsSquaresData", (new StringBuilder("Invalid ViewerSquare:\n")).append(viewersquare.toJsonString()).toString()); flag = false; } return flag; } private static final class SquareData { public final SquareMember inviter; public final int sortIndex; public final boolean suggested; public final int suggestionSortIndex; public final ViewerSquare viewerSquare; public SquareData(ViewerSquare viewersquare, boolean flag, SquareMember squaremember, int i, int j) { viewerSquare = viewersquare; suggested = flag; inviter = squaremember; sortIndex = i; suggestionSortIndex = j; } public final String getInviterGaiaId() { String s; if(inviter != null) s = inviter.obfuscatedGaiaId; else s = null; return s; } } }