package com.kitty.poclient.common;
import java.util.List;
import org.fourthline.cling.android.AndroidUpnpService;
import org.fourthline.cling.model.meta.Service;
import org.fourthline.cling.model.types.UDN;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import com.kitty.poclient.R;
import com.kitty.poclient.activity.LoginActivity;
import com.kitty.poclient.activity.MainActivity;
import com.kitty.poclient.dao.AlbumDao;
import com.kitty.poclient.dao.MusicDao;
import com.kitty.poclient.data.VirtualData;
import com.kitty.poclient.db.DBHelper;
import com.kitty.poclient.domain.Album;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.models.StateModel;
import com.kitty.poclient.upnp.BoxSubscription;
import com.kitty.poclient.upnp.CacheControlSubscriptionCallback;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
public class UpnpApp extends Application {
public static final String TAG = "UpnpApp";
public static Context context;
public static MainActivity mainActivity;
public static AndroidUpnpService upnpService;
public static Service directoryService;
public static Service avTransportService;
public static Service renderingControlService;
public static Service boxControlService;
public static Service cacheControlService;
public static Service connectionManagerService;
public static UDN BOXUDN;
public static CacheControlSubscriptionCallback myCacheSub;
// public static AVTransportSubscriptionCallback myAVSub;
public static BoxSubscription myBoxSub;
public static MainHandler mainHandler = new MainHandler();
@Override
public void onCreate() {
super.onCreate();
// ken,为捕获系统崩溃故障添加2013.07.17
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());
if (Constant.Config.DEVELOPER_MODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyDialog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyDeath().build());
}
// important! this sax driver is necessary for cling stack
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
context = getApplicationContext();
System.out.println("getApplicationContext()=" + context);
initImageLoader(context);
initDB(1);
initLocalData();
}
public static void initImageLoader(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory().discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).writeDebugLogs().build();
ImageLoader.getInstance().init(config);
}
public static boolean isUpnpAlive() {
if (UpnpApp.upnpService == null) {
// UpnpApp.showToastMessage("通信异常:pnpService==null");
UpnpApp.mainHandler.showAlert(R.string.network_unnormal_alert);
return false;
} else if (UpnpApp.upnpService.getControlPoint() == null) {
// UpnpApp.showToastMessage("通信异常:controlPoint==null");
UpnpApp.mainHandler.showAlert(R.string.network_unnormal_alert);
return false;
}
return true;
}
// 重连盒子
public static void reconnect() {
/*
* System.gc();
*
* Looper.prepare(); Intent intent = new Intent(context,
* LoginActivity.class); //
* intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
* intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Log.e(TAG,
* "reconnect from upnpapp.java");
* UpnpApp.context.startActivity(intent); //
* CustomToast.makeText(UpnpApp.context, "连接中断,请重连设备",
* Toast.LENGTH_LONG).show();
* UpnpApp.mainHandler.showAlert(R.string.device_disconnect_alert);
* Looper.loop();
*/
Intent loginIntent = new Intent(context, LoginActivity.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Bundle bundle = new Bundle();
bundle.putInt(LoginActivity.BUNDLE_STATE, StateModel.STATE_ERROR);
loginIntent.putExtras(bundle);
UpnpApp.context.startActivity(loginIntent);
}
public static Context getContext() {
return context;
}
// public static void initAllServices(Device rootDevice) {
// if (rootDevice == null || rootDevice.getServices() == null) {
// Log.e("BUG828", TAG + " initAllServices():rootDevice==null?" +
// (rootDevice == null));
// return;
// }
//
// for (Service service : rootDevice.getServices()) {
// if (service.getServiceType().getType().equals("ContentDirectory")) {
// UpnpApp.directoryService = service;
// } else if (service.getServiceType().getType().equals("AVTransport")) {
// UpnpApp.avTransportService = service;
// } else if (service.getServiceType().getType().equals("RenderingControl"))
// {
// UpnpApp.renderingControlService = service;
// } else if (service.getServiceType().getType().equals("BoxControl")) {
// UpnpApp.boxControlService = service;
// } else if (service.getServiceType().getType().equals("CacheControl")) {
// UpnpApp.cacheControlService = service;
// } else if
// (service.getServiceType().getType().equals("ConnectionManager")) {
// UpnpApp.connectionManagerService = service;
// }
// }
// }
public static void restartApplication(final Context context) {
Log.e("BUG965", TAG + "restartApplication()");
}
public static void sendBroadcast(String action) {
context.sendBroadcast(new Intent(action));
}
private void initDB(int version) {
SQLiteDatabase sqlite = DBHelper.getSqLitedatabase();
if (sqlite != null) {
if (sqlite.isOpen()) {
sqlite.close();
}
}
String host = "";
if (WatchDog.currentHost != null) {
host = WatchDog.currentHost.replaceAll("[.,/,:]", "");
}
String dbname = WatchDog.currentUserId + host;
DBHelper db = new DBHelper(UpnpApp.context, null, null, version, dbname + ".db", null);
db.getReadableDatabase();
}
public static void initLocalData() {
new Thread(new Runnable() {
@Override
public void run() {
List<Album> tempAlbums = new AlbumDao().getAllAlbumList();
List<Music> tempMusics = new MusicDao().getAllMusicII();
if (tempAlbums != null) {
VirtualData.albums = tempAlbums;
}
if (tempMusics != null) {
VirtualData.musics = tempMusics;
}
System.out.println("VirtualData.albums.size()=" + VirtualData.albums.size());
System.out.println("VirtualData.musics.size()=" + VirtualData.musics.size());
}
}).start();
}
}