package jianshu.io.app.model; import android.content.Context; /** * Created by Administrator on 2014/4/19. */ public class UserInfoManager implements JianshuSession.JianshuSessionListener { private static UserInfoManager sInstance; private Context context; private UserInfo cachedUserInfo; private String userId; private UserInfo userInfo; private UserInfoManagerListener listener; public static synchronized UserInfoManager init(Context context) { if(sInstance == null) { sInstance = new UserInfoManager(context); } return sInstance; } public static UserInfoManager getsInstance() { return sInstance; } private UserInfoManager(Context context) { this.context = context; this.cachedUserInfo = UserInfo.loadFromFileCache(this.context); JianshuSession.getsInstance().addListener(this); if(JianshuSession.getsInstance().isUserLogin()) { setUserInfo(this.cachedUserInfo); } else { setUserInfo(null); } } public void setListener(UserInfoManagerListener listener) { this.listener = listener; } public UserInfo getUserInfo() { return this.userInfo; } private void setUserInfo(UserInfo userInfo) { this.userInfo = userInfo; if(this.listener != null) { this.listener.onUserInfoChanged(this.userInfo); } } public void refresh() { if (this.userId != null) { UserInfo userInfo = UserInfo.load(this.context, this.userId); if (userInfo != null) { if (this.userInfo == null || !isSame(userInfo)) { setUserInfo(userInfo); } } } } private boolean isSame(UserInfo userInfo) { return this.userInfo.getUserId().equals(userInfo.getUserId()) && this.userInfo.getName().equals(userInfo.getName()) && this.userInfo.getAvatarUrl().equals(userInfo.getAvatarUrl()) && this.userInfo.getIntroduce().equals(userInfo.getIntroduce()); } public void setUserId(String userId) { String oldUserId = this.userId; this.userId = userId; if(oldUserId == null || !oldUserId.equals(userId)) { if(this.cachedUserInfo != null) { if(this.cachedUserInfo.getUserId().equals(userId)) { setUserInfo(this.cachedUserInfo); } } refresh(); } } @Override public void onLogin() { } @Override public void onLogout() { setUserInfo(null); this.userId = null; } public interface UserInfoManagerListener { void onUserInfoChanged(UserInfo userInfo); } }