package com.talk.demo.core; import android.accounts.Account; import android.content.Context; import android.text.TextUtils; import android.util.Log; import com.talk.demo.persistence.DBManager; import com.talk.demo.persistence.DialogRecord; import com.talk.demo.persistence.TimeRecord; import com.talk.demo.talk.DialogCache; import com.talk.demo.talk.DialogItem; import com.talk.demo.talk.TalkViewItem; import com.talk.demo.time.TimeCache; import com.talk.demo.time.TimeViewItem; import com.talk.demo.time.ViewAsItem; import com.talk.demo.util.AccountUtils; import com.talk.demo.util.TalkUtil; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class RecordManager { private static String TAG = "RecordManager"; private List<TimeRecord> trlist; private List<DialogRecord> drlist; private DBManager dbMgr; private Context context; private String ownUser; public RecordManager(DBManager mgr, Context ctx) { trlist = new ArrayList<TimeRecord>(); drlist = new ArrayList<DialogRecord>(); dbMgr = mgr; context = ctx; Account accout = AccountUtils.getPasswordAccessibleAccount(context); if (accout != null && !TextUtils.isEmpty(accout.name)) { Log.d(TAG,"account name: "+accout.name); ownUser = accout.name; } } private boolean exsitRoom(List<String> room, String link) { if(room.isEmpty()) { return false; } for(String str: room) { if(str.equalsIgnoreCase(link)) { return true; } } return false; } private String getTalkObject(String sender, String link) { String result = new String(); if(ownUser.equalsIgnoreCase(sender)) { result = link; } else { result = sender; } Log.d(TAG,"talk object : "+result); return result; } public ArrayList<TalkViewItem> initDataListTalk(HashMap<String, ArrayList<DialogCache>> dialog_cache) { ArrayList<TalkViewItem> dialog_record = new ArrayList<TalkViewItem>(); if (!drlist.isEmpty()) { drlist.clear(); } Log.d(TAG, "init talk list"); drlist = dbMgr.queryDialog(); if (!dialog_record.isEmpty()) { dialog_record.clear(); } if(!dialog_cache.isEmpty()) { dialog_cache.clear(); } List<String> roomSet = new LinkedList<String>(); List<DialogRecord> roomlist = new ArrayList<DialogRecord>(); for (DialogRecord dr : drlist) { String talkObj = getTalkObject(dr.getPrvDialog().getSender(), dr.getPrvDialog().getLink()); if(!exsitRoom(roomSet, talkObj)) { roomSet.add(talkObj); TalkViewItem tvi = new TalkViewItem(); roomlist = dbMgr.queryDialogTalkPeople(talkObj); ArrayList<DialogCache> cache = new ArrayList<DialogCache>(); ArrayList<DialogItem> dItems = new ArrayList<DialogItem>(); tvi.setTalkName(talkObj); for(DialogRecord r: roomlist) { DialogItem di = new DialogItem(r.getPrvDialog()); di.setIntervalTime(r.getPrvDialog().send_interval_time); di.setDoneTime(r.getPrvDialog().send_done_time); DialogCache dc = new DialogCache(); dc.setId(r.getPrvDialog()._id); dc.setSender(r.getPrvDialog().sender); dc.setLink(r.getPrvDialog().link); dc.setContent(r.getPrvDialog().content); dc.setCreateDate(r.getPrvDialog().calc_date); dc.setCreateTime(r.getPrvDialog().create_time); dc.setMediaType(r.getPrvDialog().content_type); dItems.add(di); cache.add(dc); } tvi.setListViewItem(dItems); dialog_cache.put(talkObj, cache); dialog_record.add(tvi); } } return dialog_record; } private boolean exsitDateItem(List<String> list, String date) { if(list.isEmpty()) { return false; } for(String str: list) { if(str.equalsIgnoreCase(date)) { return true; } } return false; } private boolean exsitTag(List<String> list, String tag) { if(list.isEmpty()) { return false; } for(String str: list) { if(str.equalsIgnoreCase(tag)) { return true; } } return false; } String month12[] = {"Jan", "Feb", "Mar","Apr", "May", "June", "July","Aug", "Sept", "Oct", "Nov", "Dec" }; String month12_zh[] = {"1月", "2月", "3月","4月", "5月", "6月", "7月","8月", "9月", "10月", "11月", "12月" }; private String coverYearMonth(String yearMonth) { String[] temp = yearMonth.split("-"); Log.d(TAG, "convert to : "+Integer.parseInt(temp[1])); return month12_zh[Integer.parseInt(temp[1])-1]+" "+temp[0]; } public ArrayList<TimeViewItem> initDataListTime(HashMap<String, ArrayList<TimeCache>> record_cache, boolean isLuckDay) { ArrayList<TimeViewItem> time_records = new ArrayList<TimeViewItem>(); if (!trlist.isEmpty()) { trlist.clear(); } Log.d(TAG, "init data list"); if (true) { trlist = dbMgr.queryTime(); } else trlist = dbMgr.queryTimeWithMultipleParams(TalkUtil.conditonDates()); if (!time_records.isEmpty()) { time_records.clear(); } if(!record_cache.isEmpty()) { record_cache.clear(); } List<String> ourDateSet = new LinkedList<String>(); List<String> ourTagSet = new LinkedList<String>(); List<TimeRecord> tag_records = new ArrayList<TimeRecord>(); for (int i = 0; i< trlist.size(); i ++) { TimeViewItem tvi = new TimeViewItem(); TimeRecord tr = trlist.get(i); String mYearMonth = tr.getTimeRecord().calc_date.substring(0,7); if(!exsitDateItem(ourDateSet, mYearMonth)) { ourDateSet.add(mYearMonth); TimeViewItem tvi_head = new TimeViewItem(); tvi_head.setType(0); tvi_head.setHeadContent(coverYearMonth(mYearMonth)); Log.d(TAG, "put header: "+mYearMonth); time_records.add(tvi_head); } if(tr.getTimeRecord().tag != null && !tr.getTimeRecord().tag.isEmpty()) { if(!exsitTag(ourTagSet, tr.getTimeRecord().tag)) { ourTagSet.add(tr.getTimeRecord().tag); tvi.setType(2); Log.d(TAG, "tag is: "+tr.getTimeRecord().tag); ArrayList<TimeCache> listCache = new ArrayList<TimeCache>(); ArrayList<ViewAsItem> listViewAsItem = new ArrayList<ViewAsItem>(); tvi.setTagTitle(tr.getTimeRecord().tag); tag_records = dbMgr.queryTimeTag(tr.getTimeRecord().tag); for(TimeRecord item : tag_records) { TimeCache rc = new TimeCache(); ViewAsItem vi = new ViewAsItem(item.getTimeRecord()); vi.setTitle(item.getTimeRecord().title); rc.setId(item.getTimeRecord()._id); rc.setContent(item.getTimeRecord().content); rc.setCreateDate(item.getTimeRecord().calc_date); rc.setCreateTime(item.getTimeRecord().create_time); rc.setMediaType(item.getTimeRecord().content_type); rc.setPhotoPath(item.getTimeRecord().photo); listCache.add(rc); listViewAsItem.add(vi); } record_cache.put(tr.getTimeRecord().tag, listCache); tvi.setListViewItem(listViewAsItem); time_records.add(tvi); } continue; } tvi.setType(1); ViewAsItem vai = new ViewAsItem(tr.getTimeRecord()); vai.setTitle(tr.getTimeRecord().title); tvi.setViewItem(vai); time_records.add(tvi); } return time_records; } public ArrayList<TimeViewItem> initStoreListTime(ArrayList<TimeCache> record_cache) { ArrayList<TimeViewItem> time_records = new ArrayList<TimeViewItem>(); if (!trlist.isEmpty()) { trlist.clear(); } Log.d(TAG, "init data list"); trlist = dbMgr.queryTime(); if (!time_records.isEmpty()) { time_records.clear(); } if(!record_cache.isEmpty()) { record_cache.clear(); } for (int i = 0; i< trlist.size(); i ++) { TimeRecord tr = trlist.get(i); TimeViewItem tvi = new TimeViewItem(); TimeCache rc = new TimeCache(); ViewAsItem vi = new ViewAsItem(tr.getTimeRecord()); rc.setId(tr.getTimeRecord()._id); rc.setContent(tr.getTimeRecord().content); rc.setCreateDate(tr.getTimeRecord().calc_date); rc.setCreateTime(tr.getTimeRecord().create_time); rc.setMediaType(tr.getTimeRecord().content_type); rc.setPhotoPath(tr.getTimeRecord().photo); record_cache.add(rc); tvi.setViewItem(vi); time_records.add(tvi); } return time_records; } public void addRecord(TimeRecord tr) { dbMgr.addTime(tr); } public void addDialog(DialogRecord dr) { dbMgr.addDialog(dr); } }