package com.suan.weclient.util; import java.util.ArrayList; import android.content.Context; import android.graphics.Bitmap.CompressFormat; import android.view.View.OnClickListener; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.images.ImageCacheManager; import com.suan.weclient.util.voice.VoiceManager; public class DataManager { private ArrayList<MessageHolder> messageHolders; private ArrayList<UserBean> userBeans; ArrayList<AutoLoginListener> autoLoginListeners; ArrayList<MessageChangeListener > messageChangeListeners ; ArrayList<ProfileGetListener> profileGetListeners; ArrayList<LoginListener> loginListeners; ArrayList<DialogListener> dialogListeners ; ArrayList<UserGroupListener> userGroupListeners; private ContentFragmentChangeListener contentFragmentChangeListener; private int currentPosition = 0; private WechatManager mWechatManager; private VoiceManager mVoiceManager; private Context mContext; 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>(); messageChangeListeners = new ArrayList<DataManager.MessageChangeListener>(); profileGetListeners = new ArrayList<DataManager.ProfileGetListener>(); loginListeners = new ArrayList<DataManager.LoginListener>(); dialogListeners = new ArrayList<DataManager.DialogListener>(); userGroupListeners = new ArrayList<DataManager.UserGroupListener>(); mContext = context; mWechatManager = new WechatManager(this, context); mVoiceManager = new VoiceManager(context); userBeans = SharedPreferenceManager.getUserGroup(context); messageHolders = new ArrayList<MessageHolder>(); for (int i = 0; i < userBeans.size(); i++) { messageHolders.add(new MessageHolder(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)); userBeans.add(0, newBean); 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; userBeans.remove(deleteIndex); messageHolders.remove(deleteIndex); if(deleteIndex == currentPosition){ //should relogin this.doAutoLogin(); } } } } doGroupChangeEnd(); } public WechatManager getWechatManager(){ return mWechatManager; } public VoiceManager getVoiceManager(){ return mVoiceManager; } public int getCurrentPosition(){ return currentPosition; } public ArrayList<UserBean> getUserGroup() { return userBeans; } public ArrayList<MessageHolder> getMessageHolders() { return messageHolders; } public UserBean getCurrentUser() { if (currentPosition >= 0 && currentPosition < userBeans.size()) { return userBeans.get(currentPosition); } return null; } public MessageHolder getCurrentMessageHolder() { if (currentPosition >= 0 && currentPosition < messageHolders.size()) { return messageHolders.get(currentPosition); } return null; } public UserBean updateUser(int position) { if (position >= 0 && position < userBeans.size()) { currentPosition = position; return userBeans.get(position); } return null; } public MessageHolder updateMessageHolder(int position) { if (position >= 0 && position < messageHolders.size()) { currentPosition = position; return messageHolders.get(position); } return null; } public void setCurrentPosition(int position) { currentPosition = position; } public void addAutoLoginListener( AutoLoginListener autoLoginListener) { this.autoLoginListeners.add(autoLoginListener); } public void addMessageChangeListener( MessageChangeListener messageChangeListener) { this.messageChangeListeners.add(messageChangeListener); } public void addProfileGetListener(ProfileGetListener profileGetListener) { this.profileGetListeners.add(profileGetListener); } public void addLoginListener(LoginListener loginListener) { this.loginListeners.add(loginListener); } public void addUserGroupListener(UserGroupListener userGroupListener){ this.userGroupListeners.add(userGroupListener); } public void setContentFragmentListener(ContentFragmentChangeListener contentFragmentChangeListener){ this.contentFragmentChangeListener = contentFragmentChangeListener; } public void addLoadingListener(DialogListener dialogListener){ this.dialogListeners.add(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 doMessageGet(MessageHolder messageHolder) { for(int i = 0;i<messageChangeListeners.size();i++){ messageChangeListeners.get(i).onChange(messageHolder); } } 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){ for(int i = 0;i<dialogListeners.size();i++){ dialogListeners.get(i).onLoad(loadingText); } } public void doLoadingEnd(){ for(int i = 0;i<dialogListeners.size();i++){ dialogListeners.get(i).onFinishLoad(); } } public void doPopEnsureDialog(boolean cancelVisible,boolean cancelable,String titleText,DialogSureClickListener dialogSureClickListener){ for(int i = 0;i<dialogListeners.size();i++){ dialogListeners.get(i).onPopEnsureDialog(cancelVisible,cancelable,titleText, dialogSureClickListener); } } public void doDismissAllDialog(){ for(int i = 0;i<dialogListeners.size();i++){ dialogListeners.get(i).onDismissAllDialog(); } } public interface AutoLoginListener{ public void autoLogin(); public void onAutoLoginEnd(); } public interface MessageChangeListener { public void onChange(MessageHolder nowHolder); } public interface ProfileGetListener { 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 ContentFragmentChangeListener{ public void onChange(int index); } public interface DialogListener{ public void onLoad(String loaingText); public void onFinishLoad(); public void onPopEnsureDialog(boolean cancelVisible,boolean cancelable,String titleText,DialogSureClickListener dialogSureClickListener); public void onDismissAllDialog(); } public interface DialogSureClickListener extends OnClickListener{ } }