/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android;
import java.lang.Thread.UncaughtExceptionHandler;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsAccountsData;
import com.galaxy.meetup.client.android.content.EsDatabaseHelper;
import com.galaxy.meetup.client.android.content.EsDeepLinkInstallsData;
import com.galaxy.meetup.client.android.content.EsEventData;
import com.galaxy.meetup.client.android.content.EsPhotosDataApiary;
import com.galaxy.meetup.client.android.hangout.HangoutNotifications;
import com.galaxy.meetup.client.android.iu.InstantUploadFacade;
import com.galaxy.meetup.client.android.iu.NewMediaTracker;
import com.galaxy.meetup.client.android.service.PicasaNetworkReceiver;
import com.galaxy.meetup.client.util.EsLog;
import com.galaxy.meetup.client.util.EventDateUtils;
import com.galaxy.meetup.client.util.LinksRenderUtils;
import com.galaxy.meetup.client.util.PlusBarUtils;
import com.galaxy.meetup.client.util.TextPaintUtils;
import com.galaxy.picasa.store.PicasaStoreFacade;
/**
*
* @author sihai
*
*/
public class EsApplication extends Application implements
UncaughtExceptionHandler {
public static int sMemoryClass;
private Handler mHandler;
private Thread.UncaughtExceptionHandler sSystemUncaughtExceptionHandler;
//===========================================================================
// Constructor
//===========================================================================
public EsApplication()
{
}
public void onCreate() {
super.onCreate();
sSystemUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
final Context applicationContext = getApplicationContext();
// FIXME 4 Test
EsAccountsData.deactivateAccount(applicationContext, "sihai", true);
EsAccountsData.loadExperiments(applicationContext);
(new AsyncTask() {
protected final Object doInBackground(Object aobj[]) {
InstantUpload.startMonitoring(applicationContext);
HangoutNotifications.registerHangoutSounds(applicationContext);
TextPaintUtils.init(applicationContext);
EsAccount esaccount = EsAccountsData.getActiveAccount(applicationContext);
//EsEventData.validateInstantShare(applicationContext, esaccount);
EsDeepLinkInstallsData.removeStaleEntries(applicationContext, esaccount);
InstantUpload.showFirstTimeFullSizeNotification(applicationContext, esaccount);
NewMediaTracker.getInstance(applicationContext).processNewMedia();
return null;
}
}).execute((Object[])null);
ActivityManager activitymanager = (ActivityManager)applicationContext.getSystemService("activity");
if(Build.VERSION.SDK_INT >= 11)
sMemoryClass = activitymanager.getLargeMemoryClass();
else
sMemoryClass = activitymanager.getMemoryClass();
PlusBarUtils.init(applicationContext);
LinksRenderUtils.init(applicationContext);
EsPhotosDataApiary.setPhotosFromPostsAlbumName(applicationContext.getString(R.string.photo_view_default_title));
com.galaxy.picasa.sync.R.init(R.class);
PicasaStoreFacade.setNetworkReceiver(PicasaNetworkReceiver.class);
InstantUploadFacade.setNetworkReceiver(PicasaNetworkReceiver.class);
}
public void uncaughtException(final Thread thread, final Throwable ex)
{
boolean flag;
if(getMainLooper().getThread() != thread)
flag = true;
else
flag = false;
if(flag) {
if(EsLog.isLoggable("EsApplication", 6))
Log.e("EsApplication", (new StringBuilder("Uncaught exception in background thread ")).append(thread).toString(), ex);
if(EsDatabaseHelper.isDatabaseRecentlyDeleted()) {
if(EsLog.isLoggable("EsApplication", 6))
Log.e("EsApplication", "An account has just been deactivated, which put background threads at a risk of failure. Letting this thread live.", ex);
} else {
if(mHandler == null)
mHandler = new Handler(getMainLooper());
mHandler.post(new Runnable() {
public final void run() {
sSystemUncaughtExceptionHandler.uncaughtException(thread, ex);
}
});
}
} else {
sSystemUncaughtExceptionHandler.uncaughtException(thread, ex);
}
}
}