package com.yaoyumeng.v2ex.utils;
import android.content.Context;
import com.yaoyumeng.v2ex.Application;
import com.yaoyumeng.v2ex.api.HttpRequestHandler;
import com.yaoyumeng.v2ex.api.V2EXManager;
import com.yaoyumeng.v2ex.model.NodeModel;
import com.yaoyumeng.v2ex.model.PersistenceHelper;
import com.yaoyumeng.v2ex.model.ProfileModel;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
/**
* 登录帐号管理Created by yw on 2015/5/5.
*/
public class AccountUtils {
public static final int REQUEST_LOGIN = 0;
private static final String key_login_member = "logined@profile";
private static final String key_fav_nodes = "logined@fav_nodes";
/**
* 帐号登陆登出监听接口
*/
public static interface OnAccountListener {
abstract public void onLogout();
abstract public void onLogin(ProfileModel member);
}
private static HashSet<OnAccountListener> listeners = new HashSet<OnAccountListener>();
/**
* 注册登录接口
*
* @param listener
*/
public static void registerAccountListener(OnAccountListener listener) {
listeners.add(listener);
}
/**
* 取消登录接口的注册
*
* @param listener
*/
public static void unregisterAccountListener(OnAccountListener listener) {
listeners.remove(listener);
}
/**
* 用户是否已经登录
*
* @param cxt
* @return
*/
public static boolean isLogined(Context cxt) {
return FileUtils.isExistDataCache(cxt, key_login_member);
}
/**
* 保存登录用户资料
*
* @param cxt
* @param profile
*/
public static void writeLoginMember(Context cxt, ProfileModel profile, boolean broadcast) {
PersistenceHelper.saveModel(cxt, profile, key_login_member);
//通知所有页面,登录成功,更新用户信息
if(broadcast) {
for (OnAccountListener listener : listeners) {
listener.onLogin(profile);
}
}
}
/**
* 获取登录用户信息
*
* @param cxt
* @return
*/
public static ProfileModel readLoginMember(Context cxt) {
return PersistenceHelper.loadModel(cxt, key_login_member);
}
/**
* 删除登录用户资料
*
* @param cxt
*/
public static void removeLoginMember(Context cxt) {
File data = cxt.getFileStreamPath(key_login_member);
data.delete();
}
/**
* 保存节点收藏信息
*
* @param cxt
* @param nodes
*/
public static void writeFavoriteNodes(Context cxt, ArrayList<NodeModel> nodes) {
PersistenceHelper.saveObject(cxt, nodes, key_fav_nodes);
for (NodeModel node : nodes) {
Application.getDataSource().favoriteNode(node.name, true);
}
}
/**
* 获取收藏节点信息
*
* @param cxt
* @return
*/
public static ArrayList<NodeModel> readFavoriteNodes(Context cxt) {
return (ArrayList<NodeModel>) PersistenceHelper.loadObject(cxt, key_fav_nodes);
}
/**
* 删除节点信息
*
* @param cxt
*/
public static void removeFavNodes(Context cxt) {
File data = cxt.getFileStreamPath(key_fav_nodes);
data.delete();
}
/**
* 清除所有用户相关资料
*
* @param cxt
*/
public static void removeAll(Context cxt) {
removeLoginMember(cxt);
removeFavNodes(cxt);
//通知所有页面退出登录了,清除登录痕迹
for (OnAccountListener listener : listeners) {
listener.onLogout();
}
}
/**
* 刷新登陆用户资料
*
* @param cxt
*/
public static void refreshProfile(final Context cxt) {
V2EXManager.getProfile(cxt, new HttpRequestHandler<ProfileModel>() {
@Override
public void onSuccess(ProfileModel data) {
writeLoginMember(cxt, data, true);
}
@Override
public void onSuccess(ProfileModel data, int totalPages, int currentPage) {
onSuccess(data);
}
@Override
public void onFailure(String error) {
}
}, true);
}
public static interface OnAccountFavoriteNodesListener {
void onAccountFavoriteNodes(ArrayList<NodeModel> nodes);
}
/**
* 刷新用户收藏节点
*
* @param cxt
* @param listener
*/
public static void refreshFavoriteNodes(final Context cxt,
final OnAccountFavoriteNodesListener listener) {
V2EXManager.getFavoriteNodes(cxt, new HttpRequestHandler<ArrayList<NodeModel>>() {
@Override
public void onSuccess(ArrayList<NodeModel> data) {
AccountUtils.writeFavoriteNodes(cxt, data);
if (listener != null)
listener.onAccountFavoriteNodes(data);
}
@Override
public void onSuccess(ArrayList<NodeModel> nodes, int totalPages, int currentPage) {
}
@Override
public void onFailure(String error) {
}
});
}
}