/**============================================================
* 版权: 久其软件 版权所有 (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;
}
}