package edu.hebtu.movingcampus.activity.wrapper; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OptionalDataException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.content.Context; import android.content.SharedPreferences; import edu.hebtu.movingcampus.config.Constants; import edu.hebtu.movingcampus.entity.User; import edu.hebtu.movingcampus.enums.NewsType; import edu.hebtu.movingcampus.subject.base.ListOfNews; import edu.hebtu.movingcampus.subject.base.OneofNews; import edu.hebtu.movingcampus.subject.base.Subject; import edu.hebtu.movingcampus.subjects.CardSubject; import edu.hebtu.movingcampus.subjects.LibrarySubject; import edu.hebtu.movingcampus.subjects.LocalNewsSubject; import edu.hebtu.movingcampus.subjects.NewsSubject; import edu.hebtu.movingcampus.utils.LogUtil; /** * @author hippo * @version 1.0 * @created 14-Nov-2013 9:13:32 AM */ public class IPreference { private static volatile IPreference instance; private static String serilizeFile = Constants.PREFER_FILE + ".db"; private User profile; private HashMap<String, Subject> subjects=new HashMap<String, Subject>(); /** * Double checked locking not work on java1.4 and earlier! */ //单例模式 private IPreference(Context context) { try { instance=load(context); } catch (OptionalDataException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } if(instance==null) instance = this; else return; // TODO,settings,for debug SharedPreferences pre = context.getSharedPreferences( Constants.PREFER_FILE, 0); SharedPreferences.Editor editor= pre.edit(); //本地信息 //默认为0 if(pre.getInt(Constants.LIB_DAYS, 0)==0){ editor.putInt(Constants.LIB_DAYS, 10); editor.putInt(Constants.BALANCE_LOWEAST, 10); } editor.commit(); // 本地信息,第一个,默认显示 CardSubject card=new CardSubject(context); subjects.put(card.getTag(), card); // 10元之内,提醒 LibrarySubject lib=new LibrarySubject(context); subjects.put(lib.getTag(), lib); // 10天之内过期的书 for (int i = 1; i < NewsType.values().length; i++) { if (pre.getBoolean("news_" + i, true)) { NewsSubject s=new NewsSubject(NewsType.values()[i]); subjects.put(s.getTag(),s); // 每次接受20条|默认,学校新闻... } } } /** * Double checked locking not work on java1.4 or earlier! */ public static IPreference getInstance(Context context) { if (instance == null) { synchronized (IPreference.class) { if (instance == null) instance = new IPreference(context); } } return instance; } /** * IPreference 的序列化流 * * @param filename * @throws IOException * @parm context */ public static void save(Context context) throws IOException { FileOutputStream fos = context.openFileOutput(serilizeFile, Context.MODE_PRIVATE); ObjectOutputStream oo = new ObjectOutputStream(fos); oo.writeObject(IPreference.getInstance(context)); oo.flush(); fos.close(); oo.close(); LogUtil.d("board", "saved in" + serilizeFile); } /** * IPreference的反序列化, * * @param filename * @return * @throws IOException * @throws ClassNotFoundException * @throws OptionalDataException * @parm context */ public static IPreference load(Context context) throws OptionalDataException, ClassNotFoundException, IOException { IPreference obj=null; FileInputStream fis = context.openFileInput(serilizeFile); ObjectInputStream oi = new ObjectInputStream(fis); obj = (IPreference) oi.readObject(); oi.close(); fis.close(); LogUtil.d("board", "deserialize: " + instance.toString()); return obj; } /** * 得到相应主题的新闻列表,id范围0是本地推送的新闻,1-...是主题新闻 * @param id * @return */ public ListOfNews getListOfNewsSubjectByID(int id) { if(id==0){ LocalNewsSubject ls=new LocalNewsSubject(); for (Subject n : subjects.values()) if(n instanceof OneofNews) ls.addLocalSubject((OneofNews) n); return ls; } return (ListOfNews) subjects.get("subject."+id); } /** * 移除相应主题的新闻 * @param id */ public void removeListOfNewsSubjectById(int id) { subjects.remove(((Subject)getListOfNewsSubjectByID(id)).getTag()); } public List<ListOfNews> getTopics() { List<ListOfNews>list=new ArrayList<ListOfNews>(); list.add(getListOfNewsSubjectByID(0)); for (Subject n : subjects.values()) if(n instanceof ListOfNews) list.add((ListOfNews) n); return list; } public void addListOfNewsSubject(NewsSubject newsSubject) { subjects.put(newsSubject.getTag(),newsSubject); } public User getProfile() { return profile; } public void setProfile(User profile) { this.profile = profile; } }