/**============================================================ * 版权: 久其软件 版权所有 (c) * 包: com.jiuqi.njt.ui * 修改记录: * 日期 作者 内容 * ============================================================= * 2013-7-30 liyue * ============================================================*/ package com.jiuqi.njt.model; import java.io.InputStream; import java.util.ArrayList; import org.xmlpull.v1.XmlPullParser; import android.content.Context; import android.content.res.Resources.NotFoundException; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.Xml; import com.jiuqi.njt.R; import com.jiuqi.njt.util.Constants; import com.jiuqi.njt.util.UIUtil; /** * <p>NxwLinkVoManager</p> * * <p>Copyright: 版权所有 (c)<br> * Company: 久其</p> * * @author liyue * @version 2013-7-30 */ public class NxwAppVoManager{ private ArrayList<NxwAppCategoryVo> categories = null; private static NxwAppVoManager _instance; public static NxwAppVoManager getInstance(Context context){ if(null == _instance){ return new NxwAppVoManager(context); } else{ return _instance; } } private NxwAppVoManager(Context context){ parseNjtXml(context); } private void parseNjtXml(Context context){ InputStream in = null; try{ in = context.getResources().openRawResource(R.raw.njt); Drawable ICON_DEFAULT = context.getResources().getDrawable(R.drawable.icon_app_default); NxwAppCategoryVo category = null; NxwAppVo app = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(in, "UTF-8"); //为Pull解释器设置要解析的XML数据 int event = pullParser.getEventType(); int id = 0; while(event != XmlPullParser.END_DOCUMENT){ switch(event){ case XmlPullParser.START_DOCUMENT: categories = new ArrayList<NxwAppCategoryVo>(); break; case XmlPullParser.START_TAG: if(Constants.PARAM_APPCATEGORY.equals(pullParser.getName())){ category = new NxwAppCategoryVo(); String name = pullParser.getAttributeValue(null, Constants.PARAM_NAME); category.setName(name); String ico = pullParser.getAttributeValue(null, Constants.PARAM_ICO); //如果图标为空,显示默认 if(TextUtils.isEmpty(ico)){ category.setIco(ICON_DEFAULT); } else{ //如果不为空并能找到则显示,找不到显示默认 Drawable drawable = null; try{ drawable = context.getResources().getDrawable(UIUtil.getDrawableIdByName(ico)); category.setIco(drawable); } catch(NotFoundException e){ category.setIco(ICON_DEFAULT); } } category.setId(id); id++; } else if(Constants.PARAM_APP.equals(pullParser.getName())){ app = new NxwAppVo(); String name = pullParser.getAttributeValue(null, Constants.PARAM_NAME); String packageName = pullParser.getAttributeValue(null, Constants.PARAM_PACKAGE); String activity = pullParser.getAttributeValue(null, Constants.PARAM_ACTIVITY); String url = pullParser.getAttributeValue(null, Constants.PARAM_URL); String filename = pullParser.getAttributeValue(null, Constants.PARAM_FILENAME); String ico = pullParser.getAttributeValue(null, Constants.PARAM_ICO); app.setName(name); app.setPackageName(packageName); app.setActivity(activity); app.setUrl(url); app.setFileName(filename); //如果图标为空,显示默认 if(TextUtils.isEmpty(ico)){ app.setIco(ICON_DEFAULT); } else{ //如果不为空并能找到则显示,找不到显示默认 Drawable drawable = null; try{ drawable = context.getResources().getDrawable(UIUtil.getDrawableIdByName(ico)); app.setIco(drawable); } catch(NotFoundException e){ app.setIco(ICON_DEFAULT); } } } break; case XmlPullParser.END_TAG: if(Constants.PARAM_APPCATEGORY.equals(pullParser.getName())){ categories.add(category); category = null; } else if(Constants.PARAM_APP.equals(pullParser.getName())){ //apps.add(app); category.getSubApps().add(app); app = null; } break; } event = pullParser.next(); } //Log.v(Constants.TAG, categories.toString()); } // catch(IOException e){ // e.printStackTrace(); // UIUtil.showMsg(context, "配置文件IO错误: " + e.getMessage()); // } catch(Exception e){ e.printStackTrace(); } finally{ try{ if(null != in){ in.close(); } } catch(Exception e){ e.printStackTrace(); UIUtil.showMsg(context, "配置文件IO错误: " + e.getMessage()); } } } /** * 得到有多少个类别,如果没有则返回一个空的列表 * @return ArrayList<NxwAppCategoryVo> */ public ArrayList<NxwAppCategoryVo> getAppCategories(){ if(null == categories){ categories = new ArrayList<NxwAppCategoryVo>(); } return categories; } /** * 得到指定的各个app,如果没有,返回空白列表 * @param id * @return ArrayList<NxwAppVo> */ public ArrayList<NxwAppVo> getAppsFromCategory(int id){ if(null == categories){ return new ArrayList<NxwAppVo>(); } NxwAppCategoryVo c = null; for(NxwAppCategoryVo category : categories){ if(category.getId() == id){ c = category; break; } else{ continue; } } return c.getSubApps(); } /** * 得到所有的App * @return ArrayList<NxwAppVo> */ public ArrayList<NxwAppVo> getAllApps(){ ArrayList<NxwAppVo> apps = new ArrayList<NxwAppVo>(); for(NxwAppCategoryVo c : getAppCategories()){ for(NxwAppVo a : c.getSubApps()){ apps.add(a); } } return apps; } /** * 根据名称得到App,如果名称为空,返回null,如果找不到,返回null<br> * 名称和njt.xml里面的appname对应 * @param strName * @return NxwAppVo */ public NxwAppVo getAppByName(String strName){ NxwAppVo app = null; if(TextUtils.isEmpty(strName)){ return app; } for(NxwAppVo a : getAllApps()){ if(strName.equals(a.getName())){ app = a; break; } } return app; } }