package net.dev123.yibo.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import net.dev123.commons.ServiceProvider;
import net.dev123.mblog.MicroBlog;
import net.dev123.mblog.MicroBlogFactory;
import net.dev123.sns.Sns;
import net.dev123.sns.SnsFactory;
import net.dev123.yibo.common.NetUtil.NetworkOperator;
import net.dev123.yibo.db.LocalAccount;
import net.dev123.yibo.db.LocalAccountDao;
import android.content.Context;
public class GlobalVars {
public static boolean IS_OBEY_SINA_AGREEMENT = false; // 是否遵循新浪协议
public static boolean IS_MOBILE_NET_UPDATE_VERSION = false; //2g/3g网络下是否提示更新
//当前网络类型;
public static NetworkOperator NET_OPERATOR = NetworkOperator.NONE;
public static NetType NET_TYPE = NetType.NONE;
//缓冲设置配置
public static boolean IS_SHOW_HEAD;
public static boolean IS_SHOW_THUMBNAIL;
public static int UPDATE_COUNT;
public static ImageQuality IMAGE_DOWNLOAD_QUALITY;
public static boolean IS_ENABLE_GESTURE;
public static Locale LOCALE;
public static int FONT_SIZE_HOME_BLOG;
public static int FONT_SIZE_HOME_RETWEET;
public static boolean IS_DETECT_IAMGE_INFO;
public static boolean IS_AUTO_LOAD_COMMENTS;
public static boolean IS_FULLSCREEN;
//运行时环境变量
private static Map<Long, MicroBlog> microblogMap;
private static Map<Long, Sns> snsMap;
private static List<LocalAccount> accountList;
static {
microblogMap = new HashMap<Long, MicroBlog>();
accountList = new ArrayList<LocalAccount>();
snsMap = new HashMap<Long, Sns>();
}
public static void addAccount(LocalAccount account) {
if (account == null || accountList.contains(account)) {
return;
}
//时间排序
int i = 0;
for (i = 0; i < accountList.size(); i++) {
LocalAccount temp = accountList.get(i);
if (account.getCreatedAt().before(temp.getCreatedAt())) {
break;
}
}
accountList.add(i, account);
if (account.isSnsAccount()) {
if (snsMap.containsKey(account.getAccountId())) {
return;
}
Sns sns = SnsFactory.getInstance(account.getAuthorization());
if (sns != null) {
snsMap.put(account.getAccountId(), sns);
}
} else {
if (!microblogMap.containsKey(account.getAccountId())) {
MicroBlog microBlog = MicroBlogFactory.getInstance(account.getAuthorization());
if (microBlog != null) {
microblogMap.put(account.getAccountId(), microBlog);
}
}
}
}
public static void addAccounts(List<LocalAccount> list) {
if (list == null || list.size() <= 0) {
return;
}
for (LocalAccount account : list) {
addAccount(account);
}
}
public static void removeAccount(LocalAccount account) {
if (!accountList.contains(account)) {
return;
}
accountList.remove(account);
microblogMap.remove(account.getAccountId());
}
public static LocalAccount getAccount(long accountID) {
LocalAccount account = null;
if (accountID < 0) {
return account;
}
for (int i = 0; i < accountList.size(); i++) {
if (accountID == accountList.get(i).getAccountId().longValue()) {
account = accountList.get(i);
break;
}
}
return account;
}
public static MicroBlog getMicroBlog(long accountID) {
return microblogMap.get(accountID);
}
public static Sns getSns(long accountID) {
return snsMap.get(accountID);
}
public static Sns getSns(LocalAccount account) {
Sns sns = null;
if (account == null) {
return sns;
}
sns = snsMap.get(account.getAccountId());
return sns;
}
public static MicroBlog getMicroBlog(LocalAccount account) {
MicroBlog microBlog = null;
if (account == null) {
return microBlog;
}
microBlog = microblogMap.get(account.getAccountId());
return microBlog;
}
public static long getAccountID(ServiceProvider sp, String userID) {
long accountID = -1;
for (LocalAccount account : accountList) {
if (account.getServiceProvider() == sp
&& account.getUser().getId().equals(userID)) {
accountID = account.getAccountId();
break;
}
}
return accountID;
}
public static void clear() {
microblogMap.clear();
snsMap.clear();
accountList.clear();
}
/**
* 获取帐号列表
*
* @param context 操作相关Context
* @param isReload 是否从数据库重新读取
* @return 帐号列表
*/
public static List<LocalAccount> getAccountList(Context context, boolean isReload) {
if (isReload || accountList.size() == 0) {
reloadAccounts(context);
}
return accountList;
}
/**
* 重新装载帐号
*/
public static void reloadAccounts(Context context) {
if (context == null) {
return;
}
LocalAccountDao accountDao = new LocalAccountDao(context);
List<LocalAccount> listAccount = accountDao.findAllValid();
GlobalVars.clear();
GlobalVars.addAccounts(listAccount);
}
}