package com.easemob.chatuidemo.parse; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.util.Log; import com.easemob.EMValueCallBack; import com.easemob.chat.EMChat; import com.easemob.chat.EMChatManager; import com.easemob.chatuidemo.DemoHelper.DataSyncListener; import com.easemob.chatuidemo.utils.PreferenceManager; import com.easemob.easeui.domain.EaseUser; public class UserProfileManager { /** * application context */ protected Context appContext = null; /** * init flag: test if the sdk has been inited before, we don't need to init * again */ private boolean sdkInited = false; /** * HuanXin sync contact nick and avatar listener */ private List<DataSyncListener> syncContactInfosListeners; private boolean isSyncingContactInfosWithServer = false; private EaseUser currentUser; public UserProfileManager() { } public synchronized boolean init(Context context) { if (sdkInited) { return true; } ParseManager.getInstance().onInit(context); syncContactInfosListeners = new ArrayList<DataSyncListener>(); sdkInited = true; return true; } public void addSyncContactInfoListener(DataSyncListener listener) { if (listener == null) { return; } if (!syncContactInfosListeners.contains(listener)) { syncContactInfosListeners.add(listener); } } public void removeSyncContactInfoListener(DataSyncListener listener) { if (listener == null) { return; } if (syncContactInfosListeners.contains(listener)) { syncContactInfosListeners.remove(listener); } } public void asyncFetchContactInfosFromServer(List<String> usernames, final EMValueCallBack<List<EaseUser>> callback) { if (isSyncingContactInfosWithServer) { return; } isSyncingContactInfosWithServer = true; ParseManager.getInstance().getContactInfos(usernames, new EMValueCallBack<List<EaseUser>>() { @Override public void onSuccess(List<EaseUser> value) { isSyncingContactInfosWithServer = false; // in case that logout already before server returns,we should // return immediately if (!EMChat.getInstance().isLoggedIn()) { return; } if (callback != null) { callback.onSuccess(value); } } @Override public void onError(int error, String errorMsg) { isSyncingContactInfosWithServer = false; if (callback != null) { callback.onError(error, errorMsg); } } }); } public void notifyContactInfosSyncListener(boolean success) { for (DataSyncListener listener : syncContactInfosListeners) { listener.onSyncComplete(success); } } public boolean isSyncingContactInfoWithServer() { return isSyncingContactInfosWithServer; } public synchronized void reset() { isSyncingContactInfosWithServer = false; currentUser = null; PreferenceManager.getInstance().removeCurrentUserInfo(); } public synchronized EaseUser getCurrentUserInfo() { if (currentUser == null) { String username = EMChatManager.getInstance().getCurrentUser(); currentUser = new EaseUser(username); String nick = getCurrentUserNick(); currentUser.setNick((nick != null) ? nick : username); currentUser.setAvatar(getCurrentUserAvatar()); } return currentUser; } public boolean updateCurrentUserNickName(final String nickname) { boolean isSuccess = ParseManager.getInstance().updateParseNickName(nickname); if (isSuccess) { setCurrentUserNick(nickname); } return isSuccess; } public String uploadUserAvatar(byte[] data) { String avatarUrl = ParseManager.getInstance().uploadParseAvatar(data); if (avatarUrl != null) { setCurrentUserAvatar(avatarUrl); } return avatarUrl; } public void asyncGetCurrentUserInfo() { ParseManager.getInstance().asyncGetCurrentUserInfo(new EMValueCallBack<EaseUser>() { @Override public void onSuccess(final EaseUser value) { if(value != null){ setCurrentUserNick(value.getNick()); setCurrentUserAvatar(value.getAvatar()); new Thread(new Runnable() { @Override public void run() { // 更新当前用户的nickname 此方法的作用是在ios离线推送时能够显示用户nick boolean updatenick = EMChatManager.getInstance().updateCurrentUserNick( value.getNick(), true); if (!updatenick) { Log.e("user", "update current user nick fail"); } } }).start(); } } @Override public void onError(int error, String errorMsg) { } }); } public void asyncGetUserInfo(final String username,final EMValueCallBack<EaseUser> callback){ ParseManager.getInstance().asyncGetUserInfo(username, callback); } private void setCurrentUserNick(String nickname) { getCurrentUserInfo().setNick(nickname); PreferenceManager.getInstance().setCurrentUserNick(nickname); } private void setCurrentUserAvatar(String avatar) { getCurrentUserInfo().setAvatar(avatar); PreferenceManager.getInstance().setCurrentUserAvatar(avatar); } private String getCurrentUserNick() { return PreferenceManager.getInstance().getCurrentUserNick(); } private String getCurrentUserAvatar() { return PreferenceManager.getInstance().getCurrentUserAvatar(); } }