/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.content;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDoneException;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
import android.text.TextUtils;
import android.util.Log;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.api.DownloadImageOperationNoCache;
import com.galaxy.meetup.client.android.api.GetActivitiesOperation;
import com.galaxy.meetup.client.android.api.GetNearbyActivitiesOperation;
import com.galaxy.meetup.client.android.api.LocationQuery;
import com.galaxy.meetup.client.android.network.http.HttpOperation;
import com.galaxy.meetup.client.android.service.EsSyncAdapterService;
import com.galaxy.meetup.client.android.service.ServiceResult;
import com.galaxy.meetup.client.util.EsLog;
import com.galaxy.meetup.client.util.PrimitiveUtils;
import com.galaxy.meetup.server.client.domain.Comment;
import com.galaxy.meetup.server.client.domain.Update;
/**
*
* @author sihai
*
*/
public class EsPostsData {
private static final String ACTIVITY_TIMESTAMP_AND_STATUS_COLUMNS[] = {
"activity_id", "modified", "data_state"
};
private static List sEmbedsWhitelist;
private static boolean sInitialized;
private static int sLargePlayerSize;
private static Integer sMaxContentLength;
private static float sMaxPortraitAspectRatio;
private static float sMinLandscapeAspectRatio;
private static ArrayList sMixinsWhitelist;
private static ArrayList sMixinsWithPopularWhitelist;
private static ArrayList sShareboxWhitelist;
private static ArrayList sStreamNamespaces;
private static boolean sSyncEnabled = true;
private static final Object sSyncLock = new Object();
private static ArrayList sWidgetStreamNamespaces;
public static String buildActivitiesStreamKey(String s, String s1, DbLocation dblocation, boolean flag, int i)
{
return buildStreamKey(s, s1, dblocation, flag, null, null, i);
}
public static String buildSquareStreamKey(String s, String s1, boolean flag)
{
return buildStreamKey(null, null, null, false, s, s1, 0);
}
private static String buildStreamKey(String s, String s1, DbLocation dblocation, boolean flag, String s2, String s3, int i)
{
StringBuilder stringbuilder = new StringBuilder();
if(!TextUtils.isEmpty(s1) && s1.startsWith("f."))
s1 = s1.substring(2);
stringbuilder.append(s1);
stringbuilder.append('|');
stringbuilder.append(s);
stringbuilder.append('|');
int j;
if(dblocation != null)
{
if(dblocation.hasCoordinates())
{
stringbuilder.append(dblocation.getLatitudeE7());
stringbuilder.append(',');
stringbuilder.append(dblocation.getLongitudeE7());
stringbuilder.append(',');
stringbuilder.append((int)dblocation.getPrecisionMeters());
}
} else
{
stringbuilder.append("null");
}
stringbuilder.append('|');
if(flag)
j = 1;
else
j = 0;
stringbuilder.append(j);
stringbuilder.append('|');
stringbuilder.append(s2);
stringbuilder.append('|');
stringbuilder.append(s3);
stringbuilder.append('|');
stringbuilder.append(i);
return stringbuilder.toString();
}
static void cleanupData(SQLiteDatabase sqlitedatabase)
{
if(sSyncEnabled)
{
String s = buildActivitiesStreamKey(null, null, null, false, 0);
StringBuilder stringbuilder = new StringBuilder();
stringbuilder.append("stream_key NOT IN(");
stringbuilder.append(DatabaseUtils.sqlEscapeString(s));
stringbuilder.append(')');
int i = sqlitedatabase.delete("activity_streams", stringbuilder.toString(), null);
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("deleteNonEssentialStreams deleted streams: ")).append(i).toString());
int j = sqlitedatabase.delete("activities", "activity_id NOT IN (SELECT activity_id FROM activity_streams)", null);
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("cleanupData deleted unreferenced activities: ")).append(j).toString());
if(getAvailableStorage() < 0xf42400L)
{
int k = sqlitedatabase.delete("activities", "activity_id IN (SELECT activity_id FROM activity_streams WHERE sort_index > 50)", null);
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("cleanupData deleted \"all circles\" activities: ")).append(k).toString());
}
deleteUnusedLocations(sqlitedatabase);
}
}
private static void createCommentValues(Comment comment, String s, ContentValues contentvalues) {
contentvalues.clear();
String s1 = comment.commentId;
contentvalues.put("activity_id", s);
contentvalues.put("comment_id", s1);
contentvalues.put("author_id", comment.obfuscatedId);
contentvalues.put("content", comment.text);
contentvalues.put("created", comment.timestamp);
byte abyte0[] = null;
if(comment.plusone == null)
abyte0 = null;
else
try {
abyte0 = DbPlusOneData.serialize(comment.plusone);
} catch (IOException e) {
contentvalues.putNull("plus_one_data");
}
contentvalues.put("plus_one_data", abyte0);
}
public static void deleteActivity(Context context, EsAccount esaccount, String s) {
SQLiteDatabase sqlitedatabase;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>>> deleteActivity id: ")).append(s).toString());
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
List list = getActivityStreams(sqlitedatabase, s);
String as[] = {
s
};
sqlitedatabase.delete("activity_streams", "activity_id=?", as);
sqlitedatabase.delete("activities", "activity_id=?", as);
sqlitedatabase.setTransactionSuccessful();
sqlitedatabase.endTransaction();
ContentResolver contentresolver = context.getContentResolver();
for(Iterator iterator = list.iterator(); iterator.hasNext(); contentresolver.notifyChange(EsProvider.buildStreamUri(esaccount, (String)iterator.next()), null));
} finally {
sqlitedatabase.endTransaction();
}
}
public static void deleteActivityStream(Context context, EsAccount esaccount, String s) {
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
StringBuilder stringbuilder = new StringBuilder();
stringbuilder.append("stream_key IN(");
stringbuilder.append(DatabaseUtils.sqlEscapeString(s));
stringbuilder.append(')');
int i = sqlitedatabase.delete("activity_streams", stringbuilder.toString(), null);
Uri uri = EsProvider.buildStreamUri(esaccount, s);
context.getContentResolver().notifyChange(uri, null);
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("deleteActivityStream deleted streams: ")).append(i).toString());
}
public static void deleteComment(Context context, EsAccount esaccount, String s)
{
SQLiteDatabase sqlitedatabase;
String as[];
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
as = (new String[] {
s
});
String s1 = DatabaseUtils.stringForQuery(sqlitedatabase, "SELECT activity_id FROM activity_comments WHERE comment_id = ?", as);
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>> deleteComment: ")).append(s).append(" for activity: ").append(s1).toString());
sqlitedatabase.beginTransaction();
StringBuffer stringbuffer = new StringBuffer(256);
stringbuffer.append("comment_id IN(");
stringbuffer.append(DatabaseUtils.sqlEscapeString(s));
stringbuffer.append(')');
try {
sqlitedatabase.delete("activity_comments", stringbuffer.toString(), null);
updateTotalCommentCountInTransaction(sqlitedatabase, s1, -1);
sqlitedatabase.setTransactionSuccessful();
sqlitedatabase.endTransaction();
if(s1 != null)
notifyActivityChange(sqlitedatabase, context, esaccount, s1);
} catch (SQLiteDoneException e) {
if(EsLog.isLoggable("EsPostsData", 5))
Log.w("EsPostsData", (new StringBuilder("WARNING: could not find photo for the comment: ")).append(s).toString());
} finally {
sqlitedatabase.endTransaction();
}
}
private static void deleteUnusedLocations(SQLiteDatabase sqlitedatabase) {
Cursor cursor = null;
try {
cursor = sqlitedatabase.query("location_queries", new String[] {
"_id"
}, null, null, null, null, "_id DESC");
if(null == cursor || cursor.getCount() <= 1) {
return;
}
cursor.moveToFirst();
cursor.moveToNext();
StringBuilder stringbuilder = new StringBuilder();
stringbuilder.append("_id IN(");
stringbuilder.append(cursor.getLong(0));
while(cursor.moveToNext()) {
stringbuilder.append(',');
stringbuilder.append(cursor.getLong(0));
}
stringbuilder.append(')');
sqlitedatabase.delete("location_queries", stringbuilder.toString(), null);
} finally {
if(null != cursor) {
cursor.close();
}
}
}
public static ServiceResult doActivityStreamSync(Context context, EsAccount esaccount, int i, String s, String s1, String s2, boolean flag, String s3,
int j, HttpOperation.OperationListener operationlistener, EsSyncAdapterService.SyncState syncstate)
throws Exception
{
if(EsLog.isLoggable("EsPostsData", 3))
{
String s4 = buildActivitiesStreamKey(s1, s, null, false, i);
Log.d("EsPostsData", (new StringBuilder("doActivityStreamSync starting sync stream: ")).append(s4).append(", count: ").append(j).toString());
}
GetActivitiesOperation getactivitiesoperation = new GetActivitiesOperation(context, esaccount, i, s, s1, s2, flag, s3, j, syncstate, null, operationlistener);
getactivitiesoperation.start();
if(getactivitiesoperation.getException() != null)
throw getactivitiesoperation.getException();
if(getactivitiesoperation.hasError())
throw new IOException((new StringBuilder("Error: ")).append(getactivitiesoperation.getErrorCode()).append(" [").append(getactivitiesoperation.getReasonPhrase()).append("]").toString());
else
return new ServiceResult(getactivitiesoperation);
}
public static ServiceResult doNearbyActivitiesSync(Context context, EsAccount esaccount, DbLocation dblocation, String s, int i, HttpOperation.OperationListener operationlistener, EsSyncAdapterService.SyncState syncstate)
throws Exception
{
if(EsLog.isLoggable("EsPostsData", 3))
{
String s1 = buildActivitiesStreamKey(null, null, dblocation, false, 2);
Log.d("EsPostsData", (new StringBuilder("doNearbyActivitiesSync starting sync stream: ")).append(s1).append(", count: ").append(i).toString());
}
GetNearbyActivitiesOperation getnearbyactivitiesoperation = new GetNearbyActivitiesOperation(context, esaccount, dblocation, s, i, syncstate, null, null);
getnearbyactivitiesoperation.start();
if(getnearbyactivitiesoperation.getException() != null)
throw getnearbyactivitiesoperation.getException();
if(getnearbyactivitiesoperation.hasError())
throw new IOException((new StringBuilder("Error: ")).append(getnearbyactivitiesoperation.getErrorCode()).append(" [").append(getnearbyactivitiesoperation.getReasonPhrase()).append("]").toString());
else
return new ServiceResult(getnearbyactivitiesoperation);
}
public static Bitmap getActivityImageData(Context context, EsAccount esaccount, String s)
{
Cursor cursor = null;
try {
cursor = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase().query("activities", new String[] {
"embed_media"
}, "activity_id=?", new String[] {
s
}, null, null, null);
if(null == cursor || !cursor.moveToFirst() || cursor.isNull(0)) {
return null;
}
byte abyte0[] = cursor.getBlob(0);
DbEmbedMedia dbembedmedia = DbEmbedMedia.deserialize(abyte0);
if(dbembedmedia == null || TextUtils.isEmpty(dbembedmedia.getImageUrl())) {
return null;
}
Resources resources = context.getResources();
int i = (int)resources.getDimension(R.dimen.notification_bigpicture_width);
int j = (int)resources.getDimension(R.dimen.notification_bigpicture_width);
DownloadImageOperationNoCache downloadimageoperationnocache = new DownloadImageOperationNoCache(context, esaccount, (new MediaImageRequest(dbembedmedia.getImageUrl(), 3, i, j, true)).getDownloadUrl(), null, null);
downloadimageoperationnocache.start();
if(downloadimageoperationnocache.getBitmap() == null) {
return null;
}
return downloadimageoperationnocache.getBitmap();
} finally {
if(null != cursor) {
cursor.close();
}
}
}
public static void insertLocations(Context context, EsAccount esaccount, LocationQuery locationquery, DbLocation dblocation, DbLocation dblocation1, List arraylist) throws IOException {
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
String s = locationquery.getKey();
sqlitedatabase.delete("location_queries", "key=?", new String[] {
s
});
ArrayList arraylist1 = new ArrayList();
if(dblocation != null)
arraylist1.add(dblocation);
if(dblocation1 != null)
arraylist1.add(dblocation1);
arraylist1.addAll(arraylist);
if(arraylist1.size() <= 0) {
return;
}
ContentValues contentvalues = new ContentValues();
contentvalues.put("key", s);
long l = sqlitedatabase.insertOrThrow("location_queries", "key", contentvalues);
if(l < 0L)
return;
try {
sqlitedatabase.beginTransaction();
int i = arraylist1.size();
for(int j = 0; j < i; j++)
{
DbLocation dblocation2 = (DbLocation)arraylist1.get(j);
contentvalues.clear();
contentvalues.put("qrid", Long.valueOf(l));
contentvalues.put("name", dblocation2.getLocationName());
contentvalues.put("location", DbLocation.serialize(dblocation2));
sqlitedatabase.insertOrThrow("locations", "qrid", contentvalues);
}
sqlitedatabase.setTransactionSuccessful();
Uri uri = EsProvider.buildLocationQueryUri(esaccount, locationquery.getKey());
context.getContentResolver().notifyChange(uri, null);
} finally {
sqlitedatabase.endTransaction();
}
}
private static long getActivityLastEditedTime(Update update)
{
return Math.max(PrimitiveUtils.safeLong(update.updatedTimestampUsec) / 1000L, update.timestamp.longValue());
}
private static long getActivityLastModifiedTime(Update update)
{
long l = getActivityLastEditedTime(update);
if(update.comment != null)
{
for(Iterator iterator = update.comment.iterator(); iterator.hasNext();)
{
Comment comment = (Comment)iterator.next();
l = Math.max(l, Math.max(PrimitiveUtils.safeLong(comment.updatedTimestampUsec), comment.timestamp.longValue()));
}
}
if(update.plusone != null)
l = Math.max(l, (long)PrimitiveUtils.safeDouble(update.plusone.timeModifiedMs));
return l;
}
private static HashMap getActivityStatuses(SQLiteDatabase sqlitedatabase, List list)
{
Cursor cursor = null;
StringBuilder stringbuilder = new StringBuilder();
ArrayList arraylist = new ArrayList();
stringbuilder.append("activity_id IN (");
Update update;
for(Iterator iterator = list.iterator(); iterator.hasNext(); arraylist.add(update.updateId))
{
update = (Update)iterator.next();
stringbuilder.append("?,");
}
stringbuilder.setLength(-1 + stringbuilder.length());
stringbuilder.append(")");
HashMap hashmap = new HashMap();
try {
cursor = sqlitedatabase.query("activities", ACTIVITY_TIMESTAMP_AND_STATUS_COLUMNS, stringbuilder.toString(), (String[])arraylist.toArray(new String[0]), null, null, null);
while(cursor.moveToNext())
{
String s = cursor.getString(0);
ActivityStatus activitystatus = new ActivityStatus();
activitystatus.timestamp = cursor.getLong(1);
activitystatus.dataStatus = cursor.getInt(2);
hashmap.put(s, activitystatus);
}
return hashmap;
} finally {
if(null != cursor) {
cursor.close();
}
}
}
private static List getActivityStreams(SQLiteDatabase sqlitedatabase, String s)
{
Cursor cursor = null;
ArrayList arraylist = new ArrayList();
try {
cursor = sqlitedatabase.query(true, "activity_streams", ActivityStreamKeyQuery.PROJECTION, "activity_id=?", new String[] {
s
}, null, null, null, null);
if(null != cursor) {
for(; cursor.moveToNext(); arraylist.add(cursor.getString(0)));
}
return arraylist;
} finally {
if(null != cursor) {
cursor.close();
}
}
}
private static long getAvailableStorage()
{
long l;
try
{
StatFs statfs = new StatFs(Environment.getDataDirectory().getPath());
l = (long)statfs.getAvailableBlocks() * (long)statfs.getBlockSize();
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("getAvailableStorage: ")).append(l).toString());
}
catch(Exception exception)
{
Log.e("EsPostsData", "getAvailableStorage", exception);
l = -1L;
}
return l;
}
private static DbPlusOneData getCommentPlusOneData(SQLiteDatabase sqlitedatabase, String s)
{
Cursor cursor = null;
try {
cursor = sqlitedatabase.query("activity_comments", new String[] {
"plus_one_data"
}, "comment_id=?", new String[] {
s
}, null, null, null);
if(null == cursor || !cursor.moveToFirst() || cursor.isNull(0)) {
return null;
}
return DbPlusOneData.deserialize(cursor.getBlob(0));
} finally {
if(null != cursor) {
cursor.close();
}
}
}
public static int getDefaultText(long l)
{
int i;
if((4096L & l) != 0L)
i = R.string.card_auto_text_event;
else
if((16384L & l) != 0L)
i = R.string.card_auto_text_skyjam;
else
if((64L & l) != 0L)
i = R.string.card_auto_text_album;
else
if((128L & l) != 0L)
i = R.string.card_auto_text_video;
else
if((32772L & l) != 0L)
i = R.string.card_auto_text_link;
else
if((32L & l) != 0L)
i = R.string.card_auto_text_image;
else
if((0x400000L & l) != 0L)
i = R.string.card_auto_text_emotishare;
else
if((8L & l) != 0L)
i = R.string.card_auto_text_location;
else
if((0x10000L & l) != 0L)
i = R.string.card_auto_text_review;
else
i = 0;
return i;
}
public static List getEmbedsWhitelist()
{
if(sEmbedsWhitelist == null)
{
ArrayList arraylist = new ArrayList();
sEmbedsWhitelist = arraylist;
arraylist.add("SQUARE");
sEmbedsWhitelist.add("SQUARE_INVITE");
sEmbedsWhitelist.add("APP_INVITE");
sEmbedsWhitelist.add("WEB_PAGE");
sEmbedsWhitelist.add("PLUS_PHOTO");
sEmbedsWhitelist.add("PLUS_PHOTO_ALBUM");
sEmbedsWhitelist.add("VIDEO_OBJECT");
sEmbedsWhitelist.add("CHECKIN");
sEmbedsWhitelist.add("PLACE_REVIEW");
sEmbedsWhitelist.add("PLUS_PHOTOS_ADDED_TO_COLLECTION");
sEmbedsWhitelist.add("PLUS_EVENT");
sEmbedsWhitelist.add("PLAY_MUSIC_TRACK");
sEmbedsWhitelist.add("PLAY_MUSIC_ALBUM");
sEmbedsWhitelist.add("HANGOUT_CONSUMER");
sEmbedsWhitelist.add("EMOTISHARE");
sEmbedsWhitelist.add("THING");
}
return sEmbedsWhitelist;
}
public static ArrayList getMixinsWhitelist(boolean flag)
{
ArrayList arraylist1;
if(flag)
{
if(sMixinsWithPopularWhitelist == null)
{
ArrayList arraylist2 = new ArrayList();
sMixinsWithPopularWhitelist = arraylist2;
arraylist2.add("POPULAR_RECOMMENDATIONS");
sMixinsWithPopularWhitelist.add("SQUARES");
sMixinsWithPopularWhitelist.add("BIRTHDAYS");
}
arraylist1 = sMixinsWithPopularWhitelist;
} else
{
if(sMixinsWhitelist == null)
{
ArrayList arraylist = new ArrayList();
sMixinsWhitelist = arraylist;
arraylist.add("SQUARES");
sMixinsWhitelist.add("BIRTHDAYS");
}
arraylist1 = sMixinsWhitelist;
}
return arraylist1;
}
private static int getMostRecentSortIndex(SQLiteDatabase sqlitedatabase, String s)
{
Cursor cursor = null;
try {
cursor = sqlitedatabase.query("activity_streams", new String[] {
"sort_index"
}, "stream_key=?", new String[] {
s
}, null, null, "sort_index ASC", "1");
if(null == cursor || !cursor.moveToFirst()) {
return 0;
}
return cursor.getInt(0);
} finally {
if(null != cursor) {
cursor.close();
}
}
}
private static DbPlusOneData getPostPlusOneData(SQLiteDatabase sqlitedatabase, String s)
{
Cursor cursor = null;
DbPlusOneData dbplusonedata;
try {
cursor = sqlitedatabase.query("activities", new String[] {
"plus_one_data"
}, "activity_id=?", new String[] {
s
}, null, null, null);
if(null == cursor || !cursor.moveToFirst()) {
return null;
}
if(cursor.isNull(0)) {
return new DbPlusOneData();
}
return DbPlusOneData.deserialize(cursor.getBlob(0));
} finally {
if(null != cursor) {
cursor.close();
}
}
}
public static ArrayList getShareboxEmbedsWhitelist()
{
if(sShareboxWhitelist == null)
{
ArrayList arraylist = new ArrayList();
sShareboxWhitelist = arraylist;
arraylist.add("APP_INVITE");
sShareboxWhitelist.add("WEB_PAGE");
sShareboxWhitelist.add("VIDEO_OBJECT");
sShareboxWhitelist.add("PLAY_MUSIC_TRACK");
sShareboxWhitelist.add("PLAY_MUSIC_ALBUM");
sShareboxWhitelist.add("THING");
}
return sShareboxWhitelist;
}
public static ArrayList getStreamNamespaces(boolean flag)
{
ArrayList arraylist1;
if(flag)
{
if(sWidgetStreamNamespaces == null)
{
ArrayList arraylist2 = new ArrayList();
sWidgetStreamNamespaces = arraylist2;
arraylist2.add("STREAM");
sWidgetStreamNamespaces.add("PHOTO");
sWidgetStreamNamespaces.add("BIRTHDAY");
}
arraylist1 = sWidgetStreamNamespaces;
} else
{
if(sStreamNamespaces == null)
{
ArrayList arraylist = new ArrayList();
sStreamNamespaces = arraylist;
arraylist.add("STREAM");
sStreamNamespaces.add("EVENT");
sStreamNamespaces.add("SEARCH");
sStreamNamespaces.add("PLUSONE");
sStreamNamespaces.add("PHOTO");
sStreamNamespaces.add("A2A");
sStreamNamespaces.add("BIRTHDAY");
sStreamNamespaces.add("PHOTOS_ADDED_TO_EVENT");
}
arraylist1 = sStreamNamespaces;
}
return arraylist1;
}
public static boolean hasStreamChanged(Context context, EsAccount esaccount, String s, List list)
{
String s1;
SQLiteDatabase sqlitedatabase;
Cursor cursor = null;
String s2;
if(list == null || list.size() == 0)
{
s1 = null;
} else
{
s1 = ((Update)list.get(0)).updateId;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("hasStreamChanged received: ")).append(list.size()).toString());
}
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase();
try {
sqlitedatabase.beginTransaction();
cursor = sqlitedatabase.query("activity_streams", new String[] {
"activity_id"
}, "stream_key=?", new String[] {
s
}, null, null, "sort_index ASC", "1");
if(null == cursor) {
s2 = null;
} else {
s2 = cursor.getString(0);
}
sqlitedatabase.setTransactionSuccessful();
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("hasStreamChanged: ")).append(s).append(" ,server activity id: ").append(s1).append(" ,local activity id: ").append(s2).toString());
boolean flag;
String s3;
if(s2 == null)
{
if(s1 == null)
flag = false;
else
flag = true;
} else
if(s1 == null)
flag = false;
else
if(!s1.equals(s2))
flag = true;
else
flag = false;
return flag;
} finally {
sqlitedatabase.endTransaction();
if(null != cursor) {
cursor.close();
}
}
}
public static void insertActivitiesAndOverwrite(Context context, EsAccount esaccount, String s, List list, String s1)
throws IOException
{
SQLiteDatabase sqlitedatabase;
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
insertActivitiesInTransaction(context, esaccount, sqlitedatabase, list, s1, true);
if(s != null)
insertActivitiesIntoStreamInTransaction$400325ad(sqlitedatabase, s, list);
sqlitedatabase.setTransactionSuccessful();
if(s != null)
{
Uri uri = EsProvider.buildStreamUri(esaccount, s);
context.getContentResolver().notifyChange(uri, null);
} else
{
Iterator iterator = list.iterator();
while(iterator.hasNext())
notifyActivityChange(sqlitedatabase, context, esaccount, ((Update)iterator.next()).updateId);
}
} finally {
sqlitedatabase.endTransaction();
}
}
private static void insertActivitiesInTransaction(Context context, EsAccount esaccount, SQLiteDatabase sqlitedatabase, List list, String s, boolean flag)
throws IOException
{
// TODO
}
private static void insertActivitiesIntoStreamInTransaction$400325ad(SQLiteDatabase sqlitedatabase, String s, List list)
{
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("insertActivitiesAndOverwrite in stream: ")).append(s).append(" ").append(list.size()).toString());
ContentValues contentvalues = new ContentValues(4);
int i = getMostRecentSortIndex(sqlitedatabase, s) - list.size();
for(Iterator iterator = list.iterator(); iterator.hasNext();)
{
Update update = (Update)iterator.next();
contentvalues.put("stream_key", s);
contentvalues.put("activity_id", update.updateId);
contentvalues.put("sort_index", Integer.valueOf(i));
contentvalues.put("last_activity", Integer.valueOf(0));
sqlitedatabase.insertWithOnConflict("activity_streams", "activity_id", contentvalues, 4);
i++;
}
}
public static void insertComment(Context context, EsAccount esaccount, String s, Comment comment) {
SQLiteDatabase sqlitedatabase;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>> insertComment: ")).append(comment.commentId).append(" for activity: ").append(s).toString());
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
ContentValues contentvalues = new ContentValues();
createCommentValues(comment, s, contentvalues);
sqlitedatabase.insertWithOnConflict("activity_comments", "activity_id", contentvalues, 5);
updateTotalCommentCountInTransaction(sqlitedatabase, s, 1);
EsPeopleData.replaceUserInTransaction(sqlitedatabase, comment.obfuscatedId, comment.authorName, comment.authorPhotoUrl);
sqlitedatabase.setTransactionSuccessful();
notifyActivityChange(sqlitedatabase, context, esaccount, s);
} finally {
sqlitedatabase.endTransaction();
}
}
public static void insertLocations(Context context, EsAccount esaccount, LocationQuery locationquery, DbLocation dblocation, DbLocation dblocation1, ArrayList arraylist)
throws IOException
{
long l;
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
String s = locationquery.getKey();
sqlitedatabase.delete("location_queries", "key=?", new String[] {
s
});
ArrayList arraylist1 = new ArrayList();
if(dblocation != null)
arraylist1.add(dblocation);
if(dblocation1 != null)
arraylist1.add(dblocation1);
arraylist1.addAll(arraylist);
if(arraylist1.size() <= 0) {
return;
}
ContentValues contentvalues = new ContentValues();
contentvalues.put("key", s);
l = sqlitedatabase.insertOrThrow("location_queries", "key", contentvalues);
if(l < 0L) {
return;
}
try {
sqlitedatabase.beginTransaction();
int i = arraylist1.size();
for(int j = 0; j < i; j++)
{
DbLocation dblocation2 = (DbLocation)arraylist1.get(j);
contentvalues.clear();
contentvalues.put("qrid", Long.valueOf(l));
contentvalues.put("name", dblocation2.getLocationName());
contentvalues.put("location", DbLocation.serialize(dblocation2));
sqlitedatabase.insertOrThrow("locations", "qrid", contentvalues);
}
sqlitedatabase.setTransactionSuccessful();
Uri uri = EsProvider.buildLocationQueryUri(esaccount, locationquery.getKey());
context.getContentResolver().notifyChange(uri, null);
} finally {
sqlitedatabase.endTransaction();
}
}
public static void insertMultiStreamActivities(Context context, EsAccount esaccount, List list, List list1, String s)
throws IOException
{
SQLiteDatabase sqlitedatabase;
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
insertActivitiesInTransaction(context, esaccount, sqlitedatabase, list1, s, false);
for(Iterator iterator = list.iterator(); iterator.hasNext(); insertActivitiesIntoStreamInTransaction$400325ad(sqlitedatabase, (String)iterator.next(), list1));
sqlitedatabase.setTransactionSuccessful();
} finally {
sqlitedatabase.endTransaction();
}
}
public static boolean isActivityPlusOnedByViewer(Context context, EsAccount esaccount, String s) {
Cursor cursor = null;
try {
cursor = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getReadableDatabase().query("activities", new String[] {
"plus_one_data"
}, "activity_id=?", new String[] {
s
}, null, null, null);
if(!cursor.moveToFirst() || cursor.isNull(0)) {
return false;
}
DbPlusOneData dbplusonedata = DbPlusOneData.deserialize(cursor.getBlob(0));
if(null == dbplusonedata) {
return false;
}
return dbplusonedata.isPlusOnedByMe();
} finally {
if(null != cursor) {
cursor.close();
}
}
}
public static void markActivitiesAsRead(Context context, EsAccount esaccount, List list) {
SQLiteDatabase sqlitedatabase;
if(EsLog.isLoggable("EsPostsData", 3)) {
Log.d("EsPostsData", ">>>>> markActivitiesAsRead activity ids:");
String s1;
for(Iterator iterator1 = list.iterator(); iterator1.hasNext(); Log.d("EsPostsData", (new StringBuilder("\t")).append(s1).toString()))
s1 = (String)iterator1.next();
}
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
Iterator iterator;
ContentValues contentvalues = new ContentValues(1);
contentvalues.put("has_read", Integer.valueOf(1));
StringBuilder stringbuffer = new StringBuilder(256);
stringbuffer.append("activity_id IN(");
iterator = list.iterator();
if(iterator.hasNext()) {
stringbuffer.append(DatabaseUtils.sqlEscapeString((String)iterator.next()));
}
while(iterator.hasNext()) {
stringbuffer.append(DatabaseUtils.sqlEscapeString(","));
stringbuffer.append(DatabaseUtils.sqlEscapeString((String)iterator.next()));
}
stringbuffer.append(DatabaseUtils.sqlEscapeString(")"));
sqlitedatabase.update("activities", contentvalues, stringbuffer.toString(), null);
sqlitedatabase.setTransactionSuccessful();
} finally {
sqlitedatabase.endTransaction();
}
}
public static void muteActivity(Context context, EsAccount esaccount, String s, boolean flag)
{
int i;
SQLiteDatabase sqlitedatabase;
i = 1;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>>> muteActivity id: ")).append(s).toString());
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
ContentValues contentvalues = new ContentValues(1);
ContentResolver contentresolver;
if(!flag)
i = 0;
contentvalues.put("has_muted", Integer.valueOf(i));
sqlitedatabase.update("activities", contentvalues, "activity_id=?", new String[] {
s
});
sqlitedatabase.setTransactionSuccessful();
sqlitedatabase.endTransaction();
List list = getActivityStreams(sqlitedatabase, s);
contentresolver = context.getContentResolver();
for(Iterator iterator = list.iterator(); iterator.hasNext(); contentresolver.notifyChange(EsProvider.buildStreamUri(esaccount, (String)iterator.next()), null));
} finally {
sqlitedatabase.endTransaction();
}
}
private static void notifyActivityChange(SQLiteDatabase sqlitedatabase, Context context, EsAccount esaccount, String s)
{
ContentResolver contentresolver = context.getContentResolver();
android.net.Uri.Builder builder = EsProvider.ACTIVITY_VIEW_BY_ACTIVITY_ID_URI.buildUpon();
builder.appendPath(s);
contentresolver.notifyChange(builder.build(), null);
for(Iterator iterator = getActivityStreams(sqlitedatabase, s).iterator(); iterator.hasNext(); contentresolver.notifyChange(EsProvider.buildStreamUri(esaccount, (String)iterator.next()), null));
}
public static DbPlusOneData plusOneComment(Context context, EsAccount esaccount, String s, String s1, boolean flag)
{
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>>> plusOneComment activity id: ")).append(s).append(", commentId: ").append(s1).append(" ").append(flag).toString());
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
DbPlusOneData dbplusonedata = getCommentPlusOneData(sqlitedatabase, s1);
if(dbplusonedata == null)
{
dbplusonedata = null;
} else
{
dbplusonedata.updatePlusOnedByMe(flag);
replaceCommentPlusOneData(sqlitedatabase, s1, dbplusonedata);
notifyActivityChange(sqlitedatabase, context, esaccount, s);
}
return dbplusonedata;
}
public static DbPlusOneData plusOnePost(Context context, EsAccount esaccount, String s, boolean flag)
{
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>>> plusOnePost activity id: ")).append(s).append(" ").append(flag).toString());
SQLiteDatabase sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
DbPlusOneData dbplusonedata = getPostPlusOneData(sqlitedatabase, s);
if(dbplusonedata == null)
{
dbplusonedata = null;
} else
{
dbplusonedata.updatePlusOnedByMe(flag);
replacePostPlusOneData(sqlitedatabase, s, dbplusonedata);
notifyActivityChange(sqlitedatabase, context, esaccount, s);
}
return dbplusonedata;
}
private static void replaceCommentPlusOneData(SQLiteDatabase sqlitedatabase, String s, DbPlusOneData dbplusonedata) {
try {
byte abyte0[] = DbPlusOneData.serialize(dbplusonedata);
ContentValues contentvalues = new ContentValues(1);
contentvalues.put("plus_one_data", abyte0);
sqlitedatabase.update("activity_comments", contentvalues, "comment_id=?", new String[] {
s
});
} catch (IOException e) {
Log.e("EsPostsData", (new StringBuilder("Could not serialize DbPlusOneData ")).append(e).toString());
}
}
private static void replacePostPlusOneData(SQLiteDatabase sqlitedatabase, String s, DbPlusOneData dbplusonedata) {
try {
byte abyte0[] = DbPlusOneData.serialize(dbplusonedata);
ContentValues contentvalues = new ContentValues(1);
contentvalues.put("plus_one_data", abyte0);
sqlitedatabase.update("activities", contentvalues, "activity_id=?", new String[] {
s
});
} catch (IOException e) {
Log.e("EsPostsData", (new StringBuilder("Could not serialize DbPlusOneData ")).append(e).toString());
}
}
public static void setSyncEnabled(boolean flag)
{
sSyncEnabled = flag;
}
public static void syncActivities(Context context, EsAccount esaccount, EsSyncAdapterService.SyncState syncstate, HttpOperation.OperationListener operationlistener)
throws Exception
{
synchronized(sSyncLock) {
}
// TODO
}
public static void updateComment(Context context, EsAccount esaccount, String s, Comment comment) {
SQLiteDatabase sqlitedatabase;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>> editComment: ")).append(comment.commentId).append(" for activity: ").append(s).toString());
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
ContentValues contentvalues = new ContentValues();
createCommentValues(comment, s, contentvalues);
StringBuffer stringbuffer = new StringBuffer(256);
stringbuffer.append("comment_id IN(");
stringbuffer.append(DatabaseUtils.sqlEscapeString(comment.commentId));
stringbuffer.append(')');
sqlitedatabase.update("activity_comments", contentvalues, stringbuffer.toString(), null);
EsPeopleData.replaceUserInTransaction(sqlitedatabase, comment.obfuscatedId, comment.authorName, comment.authorPhotoUrl);
sqlitedatabase.setTransactionSuccessful();
notifyActivityChange(sqlitedatabase, context, esaccount, s);
} finally {
sqlitedatabase.endTransaction();
}
}
public static void updateCommentPlusOneId(Context context, EsAccount esaccount, String s, String s1, String s2)
{
SQLiteDatabase sqlitedatabase;
DbPlusOneData dbplusonedata;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>>> updateCommentPlusOneId activity id: ")).append(s).append(", comment id: ").append(s1).toString());
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
dbplusonedata = getCommentPlusOneData(sqlitedatabase, s1);
if(dbplusonedata != null && !TextUtils.equals(dbplusonedata.getId(), s2))
{
dbplusonedata.setId(s2);
replaceCommentPlusOneData(sqlitedatabase, s1, dbplusonedata);
}
return;
}
private static void updateCommentsInTransaction(SQLiteDatabase sqlitedatabase, String s, List list, boolean flag)
{
if(!flag)
sqlitedatabase.delete("activity_comments", "activity_id=?", new String[] {
s
});
if(!list.isEmpty())
{
ContentValues contentvalues = new ContentValues();
Iterator iterator = list.iterator();
while(iterator.hasNext())
{
Comment comment = (Comment)iterator.next();
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(" >>>>> insertComments comment id: ")).append(comment.commentId).append(", author id: ").append(comment.obfuscatedId).append(", content: ").append(comment.text).append(", created: ").append(comment.timestamp).toString());
if(PrimitiveUtils.safeBoolean(comment.isSpam) && !PrimitiveUtils.safeBoolean(comment.isOwnedByViewer))
{
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", " >>>>> skipping! isSpam=true");
} else
{
createCommentValues(comment, s, contentvalues);
sqlitedatabase.insertWithOnConflict("activity_comments", "activity_id", contentvalues, 5);
EsPeopleData.replaceUserInTransaction(sqlitedatabase, comment.obfuscatedId, comment.authorName, comment.authorPhotoUrl);
}
}
}
}
private static void updateMediaInTransaction(SQLiteDatabase sqlitedatabase, String s, HashSet hashset, boolean flag) {
// TODO
}
public static void updatePostPlusOneId(Context context, EsAccount esaccount, String s, String s1)
{
SQLiteDatabase sqlitedatabase;
DbPlusOneData dbplusonedata;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder(">>>>> update post plusone id: ")).append(s).append(" ").append(s1).toString());
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
dbplusonedata = getPostPlusOneData(sqlitedatabase, s);
if(dbplusonedata != null && !TextUtils.equals(dbplusonedata.getId(), s1))
{
dbplusonedata.setId(s1);
replacePostPlusOneData(sqlitedatabase, s, dbplusonedata);
}
return;
}
public static void updateStreamActivities(Context context, EsAccount esaccount, String s, List list, String s1, String s2, String s3, EsSyncAdapterService.SyncState syncstate)
throws IOException
{
int i;
SQLiteDatabase sqlitedatabase;
if(list == null)
list = new ArrayList();
i = list.size();
if(TextUtils.equals(s2, s3))
s3 = null;
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("updateStreamActivities: ")).append(s).append(" received activities: ").append(i).append(" ,new token: ").append(s3).append(" ,old token: ").append(s2).toString());
if(syncstate != null)
syncstate.incrementCount(i);
sqlitedatabase = EsDatabaseHelper.getDatabaseHelper(context, esaccount).getWritableDatabase();
try {
sqlitedatabase.beginTransaction();
int j;
ContentValues contentvalues;
int k;
if(TextUtils.isEmpty(s2))
{
j = 0;
sqlitedatabase.delete("activity_streams", "stream_key=?", new String[] {
s
});
} else
{
j = (int)DatabaseUtils.longForQuery(sqlitedatabase, "SELECT count(*) FROM activity_streams WHERE stream_key=?", new String[] {
s
});
}
contentvalues = new ContentValues(5);
k = -1 + (j + i);
for(Iterator iterator = list.iterator(); iterator.hasNext();)
{
Update update = (Update)iterator.next();
contentvalues.put("stream_key", s);
contentvalues.put("activity_id", update.updateId);
contentvalues.put("sort_index", Integer.valueOf(j));
sqlitedatabase.insertWithOnConflict("activity_streams", "activity_id", contentvalues, 5);
j++;
}
contentvalues.clear();
contentvalues.put("token", s3);
sqlitedatabase.update("activity_streams", contentvalues, "stream_key=? AND sort_index=0", new String[] {
s
});
if(TextUtils.isEmpty(s3))
{
contentvalues.clear();
contentvalues.put("last_activity", Integer.valueOf(1));
String as[] = new String[2];
as[0] = s;
as[1] = String.valueOf(k);
sqlitedatabase.update("activity_streams", contentvalues, "stream_key=? AND sort_index=?", as);
}
if(i > 0)
{
if(EsLog.isLoggable("EsPostsData", 3))
Log.d("EsPostsData", (new StringBuilder("updateStreamActivities: ")).append(s).append(" inserting activities:").append(list.size()).toString());
insertActivitiesInTransaction(context, esaccount, sqlitedatabase, list, s1, false);
}
sqlitedatabase.setTransactionSuccessful();
Uri uri = EsProvider.buildStreamUri(esaccount, s);
context.getContentResolver().notifyChange(uri, null);
} finally {
sqlitedatabase.endTransaction();
}
}
private static void updateTotalCommentCountInTransaction(SQLiteDatabase sqlitedatabase, String s, int i)
{
ContentValues contentvalues = new ContentValues();
Cursor cursor = null;
try {
cursor = sqlitedatabase.query("activities", new String[] {
"total_comment_count"
}, "activity_id=?", new String[] {
s
}, null, null, null);
int j = 0;
if(cursor != null)
{
boolean flag = cursor.moveToFirst();
j = 0;
if(flag)
j = cursor.getInt(0);
}
contentvalues.put("total_comment_count", Integer.valueOf(j + i));
sqlitedatabase.update("activities", contentvalues, "activity_id=?", new String[] {
s
});
} finally {
if(null != cursor) {
cursor.close();
}
}
}
private static final class ActivityStatus
{
int dataStatus;
long timestamp;
ActivityStatus()
{
}
}
private static interface ActivityStreamKeyQuery
{
public static final String PROJECTION[] = {
"stream_key"
};
}
}