package com.aiyou.bbs.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.aiyou.AiYouApplication;
import com.aiyou.bbs.bean.Board;
import com.aiyou.bbs.bean.Refer.ReferType;
import com.aiyou.bbs.bean.Article;
import com.aiyou.bbs.bean.Favorite;
import com.aiyou.bbs.bean.Section;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.CharacterStyle;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.Toast;
/**
* BBS工具类 API文档—— https://github.com/xw2423/nForum/wiki/nForum-API
*
* @author sollian
*/
public class BBSManager {
public static final String REFER_RECEIVER_ACTION = "android.intent.action.MY_RECEIVER";
public static final String APPKEY = "365c7cb3aeb92163";//论坛申请的appkey
public static final String API_HEAD = "http://api.byr.cn";
public static final String BBS_URL = "http://bbs.byr.cn";
public static final String FORMAT = ".json";
public static final String GUEST = "guest";
/**
* SharedPreferences
*/
private static final String SPNAME = "bbs";
private static final String SP_BBS_COLLECT = "bbs_collect";
// 键
private static final String KEY_BBS_WEBVIEW_SCALESIZE = "bbs_webview_scalesize";
private static final String KEY_USER_ID = "user_id";
private static final String KEY_USER_PASSWORD = "user_password";
private static final String KEY_MAIL = "bbs_mail";
private static final String KEY_ROOT_SECTION = "bbs_root_section";
/**
* 用户信息
*/
private static String BBS_USER_ID = null;
private static String BBS_USER_PASSWORD = null;
/**
* webview的缩放值
*/
private int mDefaultWvScale = 200;
private static int BBS_WEBVIEW_SCALESIZE = -1;
private SharedPreferences mSharedPref;
private static BBSManager mInstance;
private String mAppTail;
@SuppressWarnings("deprecation")
private BBSManager(Context context) {
mSharedPref = context.getSharedPreferences(SPNAME, Context.MODE_PRIVATE);
WebView wv = new WebView(context);
mDefaultWvScale = (int) (wv.getScale() * 100);
}
public static BBSManager getInstance(Context context) {
if (mInstance == null) {
synchronized (BBSManager.class) {
if (mInstance == null) {
mInstance = new BBSManager(context);
}
}
}
return mInstance;
}
public void setAppTail(String tail) {
mAppTail = tail;
}
public String getAppTail() {
return mAppTail;
}
/**
* 设置webview的scalesize
*
* @param size
*/
public void setWebViewScaleSize(int size) {
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putInt(KEY_BBS_WEBVIEW_SCALESIZE, size);
editor.commit();
BBS_WEBVIEW_SCALESIZE = size;
}
/**
* 获取webview的scalesize
*
* @return
*/
public int getWebViewScaleSize() {
if (-1 == BBS_WEBVIEW_SCALESIZE) {
BBS_WEBVIEW_SCALESIZE = mSharedPref.getInt(KEY_BBS_WEBVIEW_SCALESIZE, mDefaultWvScale);
}
return BBS_WEBVIEW_SCALESIZE;
}
/**
* 设置用户ID和密码
*
* @param strId
* @param strPassword
*/
public void setUserInfo(String strId, String strPassword) {
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putString(KEY_USER_ID, strId);
editor.putString(KEY_USER_PASSWORD, strPassword);
editor.commit();
BBS_USER_ID = strId;
BBS_USER_PASSWORD = strPassword;
}
/**
* 清除用户ID和密码
*/
public void clearUserInfo() {
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putString(KEY_USER_ID, null);
editor.putString(KEY_USER_PASSWORD, null);
editor.commit();
BBS_USER_ID = null;
BBS_USER_PASSWORD = null;
}
/**
* 获取用户ID
*
* @return
*/
public String getUserId() {
if (null == BBS_USER_ID) {
BBS_USER_ID = mSharedPref.getString(KEY_USER_ID, GUEST);
}
return BBS_USER_ID;
}
/**
* 获取用户密码
*
* @return
*/
public String getUserPassword() {
if (null == BBS_USER_PASSWORD) {
BBS_USER_PASSWORD = mSharedPref.getString(KEY_USER_PASSWORD, "");
}
return BBS_USER_PASSWORD;
}
/**
* 设置版面是否允许附件
*
* @param board
* @param flag
*/
public void setAllowAttachment(String board, boolean flag) {
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putBoolean(board, flag);
editor.commit();
}
/**
* 查询版面是否允许附件
*
* @param board
* @return
*/
public boolean isAllowAttachment(String board) {
return mSharedPref.getBoolean(board, true);
}
/**
* 获取收藏的文章
*
* @return 收藏的文章数组
*/
public static Article[] getArticleCollect() {
Article[] article;
SharedPreferences database = AiYouApplication.getInstance().getSharedPreferences(
SP_BBS_COLLECT, Context.MODE_PRIVATE);
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) database.getAll();
int size = map.size();
article = new Article[size];
int i = 0;
for (String json : map.values()) {
article[i++] = new Article(json);
}
return article;
}
/**
* 清空收藏
*/
public static void clearArticleCollect() {
SharedPreferences database = AiYouApplication.getInstance().getSharedPreferences(
SP_BBS_COLLECT, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = database.edit();
editor.clear();
editor.commit();
}
/**
* 删除某一条收藏
*
*/
public static void deleteArticleCollect(Article article) {
SharedPreferences database = AiYouApplication.getInstance().getSharedPreferences(
SP_BBS_COLLECT, Context.MODE_PRIVATE);
String key = article.board_name + "_" + article.id;
if (database.contains(key)) {
SharedPreferences.Editor editor = database.edit();
editor.remove(key);
editor.commit();
}
}
/**
* 将article加入收藏
*
* @param article
*/
public static void putArticleCollect(Article article) {
SharedPreferences database = AiYouApplication.getInstance().getSharedPreferences(
SP_BBS_COLLECT, Context.MODE_PRIVATE);
if (database.contains(article.board_name + "_" + article.id)) {
return;
}
SharedPreferences.Editor editor = database.edit();
editor.putString(article.board_name + "_" + article.id, article
.getJson().toString());
editor.commit();
}
/**
* 设置Refer消息
*
* @param type
* @param count
*/
public void setBBSNotificationRefer(ReferType type, int count) {
if (count < 0) {
count = 0;
}
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putInt(type.toString(), count);
editor.commit();
}
/**
* 获取是否有Refer消息
*
* @param type
* @return
*/
public int getBBSNotificationRefer(ReferType type) {
return mSharedPref.getInt(type.toString(), 0);
}
/**
* 设置是否有新邮件
*
* @param flag
*/
public void setBBSNotificationMail(boolean flag) {
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putBoolean(KEY_MAIL, flag);
editor.commit();
}
/**
* 获取是否有新邮件
*
* @return
*/
public boolean getBBSNotificationMail() {
return mSharedPref.getBoolean(KEY_MAIL, false);
}
/**
* 保存论坛根分区数据
*
* @param json
*/
public void saveRootSec(String json) {
SharedPreferences.Editor editor = mSharedPref.edit();
editor.putString(KEY_ROOT_SECTION, json);
editor.commit();
}
/**
* 获取论坛根分区数据
*
* @return
*/
public String getRootSec() {
return mSharedPref.getString(KEY_ROOT_SECTION, null);
}
/**
* 动态初始化手机论坛各个板块
*/
public static List<TreeElement> initTreeViewData(Context context,
List<TreeElement> treeElementList) {
Section sections = Section.getRootSection(context);
if (sections != null && sections.sections != null) {
if (treeElementList == null) {
treeElementList = new ArrayList<>();
} else {
treeElementList.clear();
}
TreeElement element;
for (Section section : sections.sections) {
element = new TreeElement(section.name, section.description, true);
treeElementList.add(element);
}
}
return treeElementList;
}
/**
* 向EditText中添加表情图片的方法
*
* @param context
* @param et 目标EditText
* @param bitmap 要添加的图片
* @param imageName 表示图片的String
* @param isSingle 图片是否只能包含一次
*/
public static void addPic(Context context, EditText et, Bitmap bitmap,
String imageName, boolean isSingle) {
if (isSingle) {
String tempStr = et.getText().toString();
if (tempStr.contains(imageName)) {
Toast.makeText(context, "已包含该文件", Toast.LENGTH_SHORT).show();
return;
}
}
ImageSpan imageSpan = new ImageSpan(context, bitmap);
SpannableString spannableString = new SpannableString(imageName);
spannableString.setSpan(imageSpan, 0, spannableString.length(),
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
Editable e = et.getText();
int st = et.getSelectionStart();
int en = et.getSelectionEnd();
e.replace(st, en, spannableString);
}
/**
* 关键字高亮显示
*
* @param target 需要高亮的关键字
*/
public static SpannableStringBuilder highlight(String source, String target) {
SpannableStringBuilder spannable = new SpannableStringBuilder(source);
CharacterStyle span;
Pattern p = Pattern.compile(target);
Matcher m = p.matcher(source);
while (m.find()) {
span = new ForegroundColorSpan(Color.RED);// 需要重复!
spannable.setSpan(span, m.start(), m.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannable;
}
public static boolean checkFavorite(String boardName) {
if (Favorite.mFavorite == null || Favorite.mFavorite.boards == null) {
return false;
}
for (Board b : Favorite.mFavorite.boards) {
if (b.name.equals(boardName)) {
return true;
}
}
return false;
}
}