package me.pjq.pushup;
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Environment;
import android.util.DisplayMetrics;
import me.pjq.pushup.lan.PeersMgr;
import me.pjq.pushup.lan.WifiNetworkHelper;
import me.pjq.pushup.utils.SpeakerUtil;
import java.lang.reflect.Field;
public class MyApplication extends Application {
private static final String TAG = MyApplication.class.getSimpleName();
private static Context context;
private static boolean sdCardAvailable = true;
public static int mScreenWidth = 0;
public static int mScreenHeight = 0;
public static float mDensity = 0.0f;
public static int mDensityDpi = 0;
private MediaCardStateBroadcastReceiver mediaCardStateBroadcastReceiver;
WifiNetworkHelper networkHelper;
public static PeersMgr getPeersMgr() {
return peersMgr;
}
public static void setPeersMgr(PeersMgr peersMgr) {
MyApplication.peersMgr = peersMgr;
}
static PeersMgr peersMgr;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
EFLogger.init();
LocalPathResolver.init(context);
SpeakerUtil.getInstance(context);
// Add Exception Handler.
//Thread.setDefaultUncaughtExceptionHandler(new EFUncaughtExceptionHandler());
StatUtil.setGoogleAnalyticsExceptionHandler(context);
mediaCardStateBroadcastReceiver = new MediaCardStateBroadcastReceiver();
MediaCardStateBroadcastReceiver.register(context, mediaCardStateBroadcastReceiver);
getSystemParasmeter();
networkHelper = new WifiNetworkHelper(getBaseContext());
peersMgr = new PeersMgr(networkHelper);
peersMgr.start();
}
@Override
public void onLowMemory() {
super.onLowMemory();
StatUtil.sendEvent("app_memory", "low", null, null);
}
@Override
public void onTerminate() {
super.onTerminate();
EFLogger.d(TAG, "onTerminate");
if (null != mediaCardStateBroadcastReceiver) {
MediaCardStateBroadcastReceiver.unRegister(context, mediaCardStateBroadcastReceiver);
}
peersMgr.stop();
}
public static void getSystemParasmeter() {
DisplayMetrics dm = new DisplayMetrics();
dm = context.getResources().getDisplayMetrics();
mScreenWidth = dm.widthPixels;
mScreenHeight = dm.heightPixels;
mDensity = dm.density;
mDensityDpi = dm.densityDpi;
if (android.os.Build.VERSION.SDK_INT >= 11 && android.os.Build.VERSION.SDK_INT <= 13) {
Class<?> c = null;
Object obj = null;
Field field = null;
int x = 0, sbar = 0;
try {
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance();
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
sbar = context.getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
e1.printStackTrace();
}
mScreenHeight = mScreenHeight - sbar;
}
}
public static Context getContext() {
return context;
}
private static class MediaCardStateBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
EFLogger.d(TAG, "Media state changed, intentAction:" + intent.getAction());
if (Intent.ACTION_MEDIA_UNMOUNTED.equals(intent.getAction())) {
sdCardAvailable = false;
} else if (Intent.ACTION_MEDIA_MOUNTED.equals(intent.getAction())) {
sdCardAvailable = true;
}
}
public static void register(Context context, MediaCardStateBroadcastReceiver receiver) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
intentFilter.addDataScheme("file");
context.registerReceiver(receiver, intentFilter);
}
public static void unRegister(Context context, MediaCardStateBroadcastReceiver receiver) {
context.unregisterReceiver(receiver);
receiver = null;
}
}
public static boolean isSDCardAvailable() {
String status = Environment.getExternalStorageState();
if (sdCardAvailable && status.equals(Environment.MEDIA_MOUNTED)) {
return true;
}
return false;
}
}