package com.suan.weclient.util.data; import java.util.ArrayList; import android.content.Context; import android.graphics.Bitmap.CompressFormat; import android.graphics.Rect; import android.view.View.OnClickListener; import com.suan.weclient.fragment.MassFragment; import com.suan.weclient.fragment.ProfileFragment; import com.suan.weclient.fragment.mass.VoiceFragment; import com.suan.weclient.util.SharedPreferenceManager; import com.suan.weclient.util.data.bean.MessageBean; import com.suan.weclient.util.data.bean.UserBean; import com.suan.weclient.util.data.holder.ChatHolder; import com.suan.weclient.util.data.holder.FansHolder; import com.suan.weclient.util.data.holder.ImgHolder; import com.suan.weclient.util.data.holder.MaterialHolder; import com.suan.weclient.util.data.holder.MessageHolder; import com.suan.weclient.util.data.holder.resultHolder.FansResultHolder; import com.suan.weclient.util.data.holder.resultHolder.MaterialResultHolder; import com.suan.weclient.util.data.holder.resultHolder.MessageResultHolder; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.images.ImageCacheManager; import com.suan.weclient.util.voice.RecorderThread; import com.suan.weclient.util.voice.VoiceManager; import com.suan.weclient.view.SViewPager; import com.suan.weclient.view.actionbar.CustomMainActionView; public class DataManager { private ArrayList<MessageHolder> messageHolders; private ArrayList<FansHolder> fansHolders; private ArrayList<UserBean> userBeans; private MessageHolder searchMessageHolder; private MaterialHolder materialHolder; private String FansProfileFakeId = ""; private ListLoadingListener listLoadingListener; ArrayList<AutoLoginListener> autoLoginListeners; ArrayList<MessageGetListener> messageGetListeners; ArrayList<ChatItemChangeListener> chatItemChangeListeners; ArrayList<FansListChangeListener> fansListChangeListeners; ArrayList<ProfileGetListener> profileGetListeners; ArrayList<MaterialGetListener> materialGetListeners; ArrayList<MassDataGetListener> massDataGetListeners; ArrayList<LoginListener> loginListeners; DialogListener dialogListener; ArrayList<UserGroupListener> userGroupListeners; ArrayList<ChatNewItemGetListener> chatNewItemGetListeners; ArrayList<UserIndexChangeListener > userIndexChangeListeners; ArrayList<RecorderThread.RecordListener> recordListeners; private ContentFragmentChangeListener contentFragmentChangeListener; /* * about chat * */ private ChatHolder chatHolder; /* about showing img */ private ImgHolder imgHolder; private WechatManager mWechatManager; private VoiceManager mVoiceManager; private Context mContext; private PagerListener pagerListener; private TabListener tabListener; private ProfileFragment.UserListControlListener userListControlListener; private MassFragment.RecordLayoutControlListener recordControlListener; private static int DISK_IMAGECACHE_SIZE = 1024 * 1024 * 10; 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 private ImageCacheManager mImageCacheManager; /** * * Create the image cache. */ public void createImageCache(Context context) { mImageCacheManager = ImageCacheManager.getInstance(); mImageCacheManager.init(context, context.getPackageCodePath(), DISK_IMAGECACHE_SIZE, DISK_IMAGECACHE_COMPRESS_FORMAT, DISK_IMAGECACHE_QUALITY); } public ImageCacheManager getCacheManager() { return mImageCacheManager; } public DataManager(Context context) { autoLoginListeners = new ArrayList<DataManager.AutoLoginListener>(); messageGetListeners = new ArrayList<MessageGetListener>(); chatItemChangeListeners = new ArrayList<DataManager.ChatItemChangeListener>(); fansListChangeListeners = new ArrayList<DataManager.FansListChangeListener>(); profileGetListeners = new ArrayList<DataManager.ProfileGetListener>(); materialGetListeners = new ArrayList<MaterialGetListener>(); massDataGetListeners = new ArrayList<MassDataGetListener>(); loginListeners = new ArrayList<DataManager.LoginListener>(); userGroupListeners = new ArrayList<DataManager.UserGroupListener>(); userIndexChangeListeners = new ArrayList<UserIndexChangeListener>(); recordListeners = new ArrayList<RecorderThread.RecordListener>(); mContext = context; mWechatManager = new WechatManager(this, context); mVoiceManager = new VoiceManager(context); userBeans = SharedPreferenceManager.getUserGroup(context); messageHolders = new ArrayList<MessageHolder>(); fansHolders = new ArrayList<FansHolder>(); for (int i = 0; i < userBeans.size(); i++) { messageHolders.add(new MessageHolder(userBeans.get(i))); fansHolders.add(new FansHolder(userBeans.get(i))); } } public void updateUserGroup() { //if add ,set it the first,and autologin //if delete ,if delete the first ,autologin ArrayList<UserBean> newGroupArrayList = SharedPreferenceManager.getUserGroup(mContext); if (newGroupArrayList.size() > userBeans.size()) { //when add user for (int i = 0; i < newGroupArrayList.size(); i++) { boolean exist = false; for (int j = 0; j < userBeans.size(); j++) { if (userBeans.get(j).getUserName().equals(newGroupArrayList.get(i).getUserName())) { exist = true; } } if (!exist) { UserBean newBean = newGroupArrayList.get(i); //add the user to the head messageHolders.add(0, new MessageHolder(newBean)); fansHolders.add(0, new FansHolder(newBean)); userBeans.add(0, newBean); //must reset the index to zero ,to login the new user setCurrentPosition(0); doAutoLogin(); } } } else { for (int i = 0; i < userBeans.size(); i++) { boolean exist = false; for (int j = 0; j < newGroupArrayList.size(); j++) { if (newGroupArrayList.get(j).getUserName().equals(userBeans.get(i).getUserName())) { exist = true; } } if (!exist) { int deleteIndex = i; /* get current before delete */ int currentPosition = getCurrentPosition(); userBeans.remove(deleteIndex); messageHolders.remove(deleteIndex); fansHolders.remove(deleteIndex); if (deleteIndex == currentPosition) { //should relogin this.doAutoLogin(); } } } } doGroupChangeEnd(); } public WechatManager getWechatManager() { return mWechatManager; } public VoiceManager getVoiceManager() { return mVoiceManager; } public int getCurrentPosition() { int currentPosition = SharedPreferenceManager.getCurentIndex(mContext); if (currentPosition >= 0 && currentPosition < userBeans.size()) { return currentPosition; } return 0; } public ArrayList<UserBean> getUserGroup() { return userBeans; } public void saveUserGroup(Context context){ SharedPreferenceManager.updateUser(context,this); } public ArrayList<MessageHolder> getMessageHolders() { return messageHolders; } public ArrayList<FansHolder> getFansHolders() { return fansHolders; } public UserBean getCurrentUser() { try { return userBeans.get(getCurrentPosition()); } catch (Exception e) { } return null; } public MessageHolder getCurrentMessageHolder() { try { return messageHolders.get(getCurrentPosition()); } catch (Exception e) { } return null; } public FansHolder getCurrentFansHolder() { try { return fansHolders.get(getCurrentPosition()); } catch (Exception e) { } return null; } public UserBean updateUser(int position) { if (position >= 0 && position < userBeans.size()) { setCurrentPosition(position); return userBeans.get(position); } return null; } public MessageHolder updateMessageHolder(int position) { if (position >= 0 && position < messageHolders.size()) { setCurrentPosition(position); return messageHolders.get(position); } return null; } public ChatHolder getChatHolder() { return chatHolder; } public void createChat(UserBean userBean, String toFakeId, String toNickname) { chatHolder = new ChatHolder(userBean, toFakeId, toNickname); chatNewItemGetListeners = new ArrayList<ChatNewItemGetListener>(); } public void createSearch(UserBean userBean){ searchMessageHolder = new MessageHolder(userBean); } public MessageHolder getSearchMessageHolder(){ return searchMessageHolder; } public void createMaterialHolder(UserBean userBean){ this.materialHolder = new MaterialHolder(userBean); } public MaterialHolder getMaterialHolder(){ return materialHolder; } public void createImgHolder(MessageBean messageBean,UserBean userBean){ this.imgHolder = new ImgHolder(messageBean,userBean); } public void setFansProfileFakeId(String fansProfileFakeId){ this.FansProfileFakeId = fansProfileFakeId; } public String getFansProfileFakeId(){ return FansProfileFakeId; } public ImgHolder getImgHolder(){ return this.imgHolder; } public boolean setCurrentPosition(int position) { int oldPosition = getCurrentPosition(); if(position>=0&&position<userBeans.size()){ SharedPreferenceManager.putCurrentIndex(mContext, position); for(UserIndexChangeListener nowListener:userIndexChangeListeners){ nowListener.onChange(oldPosition,position); } return true; } return false; } public void addAutoLoginListener( AutoLoginListener autoLoginListener) { this.autoLoginListeners.add(autoLoginListener); } public void addMessageChangeListener( MessageGetListener messageGetListener) { this.messageGetListeners.add(messageGetListener); } public void addChatItemChangeListenr(ChatItemChangeListener changeListener) { this.chatItemChangeListeners.add(changeListener); } public void addChatNewItemGetListener(ChatNewItemGetListener chatNewItemGetListener) { this.chatNewItemGetListeners.add(chatNewItemGetListener); } public void addFansListChangeListener(FansListChangeListener fansListChangeListener) { this.fansListChangeListeners.add(fansListChangeListener); } public void addMaterialChangeListener( MaterialGetListener materialGetListener) { this.materialGetListeners.add(materialGetListener); } public void addProfileGetListener(ProfileGetListener profileGetListener) { this.profileGetListeners.add(profileGetListener); } public void addMassDataGetListener(MassDataGetListener massDataGetListener) { this.massDataGetListeners.add(massDataGetListener); } public void addLoginListener(LoginListener loginListener) { this.loginListeners.add(loginListener); } public void addUserGroupListener(UserGroupListener userGroupListener) { this.userGroupListeners.add(userGroupListener); } public void addUserIndexChangeListener(UserIndexChangeListener userIndexChangeListener){ this.userIndexChangeListeners.add(userIndexChangeListener); } public void setContentFragmentListener(ContentFragmentChangeListener contentFragmentChangeListener) { this.contentFragmentChangeListener = contentFragmentChangeListener; } public void setLoadingListener(DialogListener dialogListener) { this.dialogListener = dialogListener; } public void doAutoLogin() { for (int i = 0; i < autoLoginListeners.size(); i++) { autoLoginListeners.get(i).autoLogin(); } } public void doAutoLoginEnd() { for (int i = 0; i < autoLoginListeners.size(); i++) { autoLoginListeners.get(i).onAutoLoginEnd(); } } public void doProfileGet(UserBean userBean) { for (int i = 0; i < profileGetListeners.size(); i++) { profileGetListeners.get(i).onGet(userBean); } } public void doMassDataGet(UserBean userBean) { for (int i = 0; i < massDataGetListeners.size(); i++) { massDataGetListeners.get(i).onGet(userBean); } } public void doMessageGet(MessageResultHolder messageResultHolder) { for (int i = 0; i < messageGetListeners.size(); i++) { messageGetListeners.get(i).onMessageGet(messageResultHolder); } } public void doMaterialGet(int type,MaterialResultHolder materialResultHolder) { for (int i = 0; i < materialGetListeners.size(); i++) { materialGetListeners.get(i).onMaterialGet(type,materialResultHolder); } } public void doChatItemGet() { for (int i = 0; i < chatItemChangeListeners.size(); i++) { chatItemChangeListeners.get(i).onItemGet(); } } public void doChatNewItemGet(ArrayList<MessageBean> getMessage, String msgId) { for (int i = 0; i < chatNewItemGetListeners.size(); i++) { chatNewItemGetListeners.get(i).onChatItemGet(getMessage, msgId); } } public void doFansGet(FansResultHolder fansResultHolder) { for (int i = 0; i < fansListChangeListeners.size(); i++) { fansListChangeListeners.get(i).onFansGet(fansResultHolder); } } public void doLoginSuccess(UserBean userBean) { for (int i = 0; i < loginListeners.size(); i++) { loginListeners.get(i).onLogin(userBean); } } public void deleteUser(int index) { for (int i = 0; i < userGroupListeners.size(); i++) { userGroupListeners.get(i).deleteUser(index); } } public void doAddUser() { for (int i = 0; i < userGroupListeners.size(); i++) { userGroupListeners.get(i).onAddUser(); } } public void doGroupChangeEnd() { for (int i = 0; i < userGroupListeners.size(); i++) { userGroupListeners.get(i).onGroupChangeEnd(); } } public void doChangeContentFragment(int index) { contentFragmentChangeListener.onChange(index); } public void doLoadingStart(String loadingText, int dialogCancelType) { if (dialogListener != null) { dialogListener.onLoad(loadingText, dialogCancelType); } } public void doLoadingEnd() { if (dialogListener != null) { dialogListener.onFinishLoad(); } } public void doPopEnsureDialog(boolean cancelVisible, boolean cancelable, String titleText,String contentText, DialogSureClickListener dialogSureClickListener) { if (dialogListener != null) { dialogListener.onPopEnsureDialog(cancelVisible, cancelable, titleText,contentText, dialogSureClickListener); } } public void doDismissAllDialog() { if (dialogListener != null) { dialogListener.onDismissAllDialog(); } } public interface AutoLoginListener { public void autoLogin(); public void onAutoLoginEnd(); } public interface MessageGetListener { public void onMessageGet(MessageResultHolder messageResultHolder); } public interface ChatItemChangeListener { public void onItemGet(); } public interface ChatNewItemGetListener { public void onChatItemGet(ArrayList<MessageBean> getMessage, String msgId); } public interface FansListChangeListener { public void onFansGet(FansResultHolder fansResultHolder); } public interface ProfileGetListener { public void onGet(UserBean userBean); } public interface MaterialGetListener { public void onMaterialGet(int type,MaterialResultHolder materialResultHolder); } public interface MassDataGetListener { public void onGet(UserBean userBean); } public interface LoginListener { public void onLogin(UserBean userBean); } public interface UserGroupListener { public void onGroupChangeEnd(); public void deleteUser(int index); public void onAddUser(); } public interface UserIndexChangeListener{ public void onChange(int oldIndex,int nowIndex); } public interface ContentFragmentChangeListener { public void onChange(int index); } public interface DialogListener { public void onLoad(String loaingText, int dialogCancelType); public void onFinishLoad(); public void onPopEnsureDialog(boolean cancelVisible, boolean cancelable, String titleText,String contentText, DialogSureClickListener dialogSureClickListener); public void onDismissAllDialog(); } public interface DialogSureClickListener extends OnClickListener { } public void setUserListControlListener(ProfileFragment.UserListControlListener userListControlListener) { this.userListControlListener = userListControlListener; } public ProfileFragment.UserListControlListener getUserListControlListener() { return this.userListControlListener; } public void setRecordControlListener(MassFragment.RecordLayoutControlListener recordControlListener){ this.recordControlListener = recordControlListener; } public MassFragment.RecordLayoutControlListener getRecordLayoutControlListener(){ return this.recordControlListener; } public void addRecordListener(RecorderThread.RecordListener recordListener){ this.recordListeners.add(recordListener); } public void doRecordStart(int type) { for (int i = 0; i < recordListeners.size(); i++) { recordListeners.get(i).onRecordStart(type); } } public void doRecordFinish(int type,String filePath,long playLength) { for (int i = 0; i < recordListeners.size(); i++) { recordListeners.get(i).onRecordFinish(type,filePath,playLength); } } /* * interface about ui */ public interface PagerListener { public void onScroll(int page, double pagePercent); public void onPage(int page); } public interface TabListener { public void onClickTab(int page); } public void setPagerListener(PagerListener pagerListener) { this.pagerListener = pagerListener; } public void setTabListener(TabListener tabListener) { this.tabListener = tabListener; } public PagerListener getPagerListener() { return pagerListener; } public TabListener getTabListener() { return tabListener; } public interface ListLoadingListener{ public void onLoadStart(); public void onLoadFinish(); } public void setListLoadingListener(ListLoadingListener listLoadingListener){ this.listLoadingListener = listLoadingListener; } public void clearListLoadingListner(){ this.listLoadingListener = null; } public void doListLoadStart(){ try{ this.listLoadingListener.onLoadStart(); }catch(Exception e){ } } public void doListLoadEnd(){ try{ this.listLoadingListener.onLoadFinish(); }catch(Exception e){ } } }