package com.appassit.activitys; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import android.app.Application; import android.content.Context; import android.graphics.Bitmap.CompressFormat; import com.appassit.R; import com.appassit.common.CitySaxParseHandler; import com.appassit.common.Const; import com.appassit.data.RequestManager; import com.appassit.model.SunModel; import com.appassit.model.city.AreaModel; import com.appassit.model.city.ProvicneModel; import com.appassit.tools.FileUtils; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; public class SLAppication extends Application { private static Context sContext; public static final boolean DEBUG = true; private LocationClient mLocationClient = null; public static int mNetWorkState; public static ArrayList<EventHandler> mListeners = new ArrayList<EventHandler>(); private static Application mApplication; /** 城市列表 */ private static List<ProvicneModel> mProvicneModels; private static List<AreaModel> mAreaModels; public static SunModel mCurSunModel; private static int mCurWeatherIndex; private static int DISK_IMAGECACHE_SIZE = 1024 * 1024 * 50; private static CompressFormat DISK_IMAGECACHE_COMPRESS_FORMAT = CompressFormat.PNG; private static int DISK_IMAGECACHE_QUALITY = 100; // PNG is lossless so quality is ignored but must be provided public static Context getContext() { return sContext; } public static synchronized Application getInstance() { return mApplication; } @Override public void onCreate() { super.onCreate(); initData(); RequestManager.init(this); } private LocationClientOption getLocationClientOption() { LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setAddrType("all"); option.setServiceName(this.getPackageName()); option.setScanSpan(0); option.disableCache(true); return option; } private void initData() { mApplication = this; sContext = this.getApplicationContext(); mLocationClient = new LocationClient(this, getLocationClientOption()); mAreaModels = new ArrayList<AreaModel>(); mCurWeatherIndex = 0; initMyArea(); initProvicneModels(); } public synchronized LocationClient getLocationClient() { if (mLocationClient == null) mLocationClient = new LocationClient(this, getLocationClientOption()); return mLocationClient; } /** * 初始化城市列表 */ private void initProvicneModels() { try { InputStream in = getAssets().open(Const.FILE_CITY_NAME); mProvicneModels = CitySaxParseHandler.getProvicneModel(in); // LogUtil.i(TAG, mProvicneModels.toString()); } catch (Exception e) { e.printStackTrace(); } } public static List<ProvicneModel> getProvicneModels() { return mProvicneModels; } /** * 初始化我的城市 */ private void initMyArea() { try { List<AreaModel> models = (List<AreaModel>) FileUtils.readObjsFromFile(Const.FILE_MY_AREA); if (models != null) { mAreaModels.addAll(models); } } catch (Exception e) { e.printStackTrace(); } } public static void setCurCityIndex(int index) { mCurWeatherIndex = index; } public static int getCurCityIndex() { return mCurWeatherIndex; } /** * 添加我的城市 * * @param model * @return */ public static String addMyArea(AreaModel model) { if (model == null) { return null; } if (mAreaModels.size() >= 5) { return getContext().getString(R.string.city_exceed_num); } else { for (AreaModel areaModel : mAreaModels) { if (areaModel.getCityId().equals(model.getCityId())) { return getContext().getString(R.string.city_already_exists); } } // 添加到第一位 mAreaModels.add(0, model); // 重新保存文件 FileUtils.writeObjsToFile(mAreaModels, Const.FILE_MY_AREA, Context.MODE_PRIVATE); // 返回添加城市结果信息 return getContext().getString(R.string.city_add_success); } } /** * 删除城市信息 * * @param position * @return */ public static AreaModel removeMyArea(int position) { // 删除数据 AreaModel model = mAreaModels.remove(position); // 重新保存文件 FileUtils.writeObjsToFile(mAreaModels, Const.FILE_MY_AREA, Context.MODE_PRIVATE); return model; } public static boolean removeMyArea(AreaModel areaModel) { // 删除数据 boolean is = mAreaModels.remove(areaModel); // 重新保存文件 FileUtils.writeObjsToFile(mAreaModels, Const.FILE_MY_AREA, Context.MODE_PRIVATE); return is; } public static List<AreaModel> getMyArea() { return mAreaModels; } public static abstract interface EventHandler { public abstract void onCityComplite(); public abstract void onNetChange(); } }