package com.aiyou.bbs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.aiyou.BaseActivity;
import com.aiyou.R;
import com.aiyou.bbs.adapter.BBSListAdapter;
import com.aiyou.bbs.adapter.BBSListAdapter.OnRayMenuClickListener;
import com.aiyou.bbs.adapter.FavoriteAdapter;
import com.aiyou.bbs.adapter.FavoriteAdapter.DeleteFavoriteListener;
import com.aiyou.bbs.bean.Article;
import com.aiyou.bbs.bean.Board;
import com.aiyou.bbs.bean.Favorite;
import com.aiyou.bbs.bean.Mail;
import com.aiyou.bbs.bean.Mailbox;
import com.aiyou.bbs.bean.Refer;
import com.aiyou.bbs.bean.Mailbox.MailboxType;
import com.aiyou.bbs.bean.Refer.ReferType;
import com.aiyou.bbs.bean.VoteList.VoteType;
import com.aiyou.bbs.bean.Search;
import com.aiyou.bbs.bean.User;
import com.aiyou.bbs.bean.Vote;
import com.aiyou.bbs.bean.VoteList;
import com.aiyou.bbs.bean.Widget;
import com.aiyou.bbs.bean.helper.AdapterInterface;
import com.aiyou.bbs.pullrefer.BBSService;
import com.aiyou.bbs.pullrefer.NotificationMgr;
import com.aiyou.bbs.pullrefer.NotificationMgr.NotifyType;
import com.aiyou.bbs.utils.BBSListHelper;
import com.aiyou.bbs.utils.BBSListHelper.BeanType;
import com.aiyou.bbs.utils.BBSManager;
import com.aiyou.utils.ActivityFunc;
import com.aiyou.utils.AiYouManager;
import com.aiyou.utils.JsonHelper;
import com.aiyou.utils.NetWorkManager;
import com.aiyou.utils.SwitchManager;
import com.aiyou.utils.http.HttpManager;
import com.aiyou.utils.logcat.Logcat;
import com.aiyou.utils.thread.ThreadUtils;
import com.aiyou.view.CustomDialog;
import com.aiyou.view.ScrollTextView;
import external.PullToRefresh.PullToRefreshBase;
import external.PullToRefresh.PullToRefreshListView;
import external.PullToRefresh.PullToRefreshBase.Mode;
import external.PullToRefresh.PullToRefreshBase.OnRefreshListener2;
import external.mesh.BitmapMesh;
import external.mesh.BitmapMesh.MeshView;
import external.otherview.ActivitySplitAnimationUtil;
import external.otherview.BadgeView;
import external.otherview.CircleImageView;
import external.otherview.Win8ProgressBar;
import external.residemenu.ResideMenu;
import external.residemenu.ResideMenuItem;
import external.residemenu.ResideMenu.OnMenuListener;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.EditorInfo;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView.OnEditorActionListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 呈现论坛文章列表的Activity
*
* @author sollian
*/
public class BBSListActivity extends BaseActivity implements OnClickListener,
OnRefreshListener2<ListView>, OnMenuListener, OnItemClickListener,
OnRayMenuClickListener, OnScrollListener {
private static final String TAG = BBSListActivity.class.getSimpleName();
private static final String RESIDE_MENU_DIVIDER = "#cccccc";
private static final int REQUESTCODE_LOGIN = 0x1111;
private static final int REQUESTCODE_SECTION = 0x1112;
private static final int MSG_USER_QUERY = 0;
private static final int MSG_GET_LIST = 1;
private static final int MSG_OPERATION = 2;
protected static final int MSG_FAVORITE = 3;
private static final int MSG_ERROR = -1;
private static final String ACTION_SET_READ = "setRead";
private static final String ACTION_DELETE = "delete";
private static final String KEY_OPENSCREEN = "open_screen";
private static final String KEY_REFRESH_DATA = "needRefreshData";
private static final String KEY_INDEX = "index";
private static final String KEY_TYPE = "type";
private static final String KEY_DATA = "data";
private BBSManager mBBSMgr;
private AiYouManager mIUMgr;
private SwitchManager mSwitchMgr;
/**
* 辅助变量
*/
private int mCurrentItem = 1;
private boolean mFlagLoadMore = false;
/**
* 辅助类
*/
private BBSListHelper mMember;
/**
* 广播接收类
*/
private MyReceiver mReceiver;
/**
* 存储item的list
*/
private List<AdapterInterface> mList = new ArrayList<>();
/**
* BaseAdapter
*/
private BaseAdapter mAdapter;
/**
* 收藏版面(右滑菜单)
*/
private List<Board> mFavoriteList = new ArrayList<>();
private BaseAdapter mFavoriteAdapter;
/**
* ResideMenu相关
*/
private ResideMenu mResideMenu;
private ResideMenuItem mUserInfoItem;
private ResideMenuItem mReplyItem;
private ResideMenuItem mAiItem;
private ResideMenuItem mMailItem;
private ResideMenuItem mLoginItem;
private ResideMenuItem mVoteItem;
private ResideMenuItem mHomepageItem;
private ResideMenuItem mPhotoShowItem;
// 日间|夜间模式
private ResideMenuItem mModeItem;
/**
* BadgeView
*/
private BadgeView mReplyBV, mAtBV, mMailBV, mFaceBV;
/**
* 控件
*/
// 左上角头像
private CircleImageView mFaceIV;
//
private ImageView mSectionIV;
// 装载meshview的布局
private LinearLayout mMeshLLayout;
// 动画视图
private MeshView mMeshView;
// 标题
private LinearLayout mTitleLLayout;
private ScrollTextView mTitleSTV;
// 显示文章列表的listview
private PullToRefreshListView mPTRListView;
private ListView mListView;
// 进度条、重试
private Win8ProgressBar mProgressBar;
// help
private ImageView mHelpImageView;
/**
* 菜单布局
*/
private FrameLayout mMenuFLayout;
private LinearLayout mArticleMenu, mReferMenu, mMailMenu;
private FrameLayout mVoteMenu;
private ImageView mDeletetIV;
private ImageView mSerchTitleIV, mSearchAuthorIV,
mWriteArticleIV;
/**
* 搜索
*/
private LinearLayout mSearchLLayout;
private EditText mSearchET;
/**
* 当前用户
*/
private User mUser;
/**
* 是否应用开屏动画
*/
private boolean mIsOpenScreen = true;
private Handler mHandler = new Handler(new Handler.Callback() {
@SuppressWarnings("unchecked")
public boolean handleMessage(Message msg) {
if (MSG_USER_QUERY == msg.what) {
Bundle data = msg.getData();
mUser = (User) data.getSerializable(KEY_DATA);
data.clear();
// 更新用户信息
updateUserWindow(mUser);
/**
* 显示分区按钮
*/
findViewById(R.id.activity_bbslist_iv_section)
.setVisibility(View.VISIBLE);
startThread(false, 1, true);
return true;
} else if (MSG_GET_LIST == msg.what) {
if (mResideMenu.isOpened()) {
mResideMenu.closeMenu();
}
@SuppressWarnings("rawtypes")
List list = mMember.getList();
if (null != list) {
mList.addAll(list);
mAdapter.notifyDataSetChanged();
}
if (mList.isEmpty()) {
Toast.makeText(getBaseContext(), "无数据",
Toast.LENGTH_SHORT).show();
}
mFlagLoadMore = true;
} else if (MSG_OPERATION == msg.what) {
// 操作——refer全删、标为已读;mail全删
Bundle data = msg.getData();
boolean needRefreshData = data.getBoolean(KEY_REFRESH_DATA);
int index = data.getInt(KEY_INDEX);
String type = data.getString(KEY_TYPE);
data.clear();
return updateBadgeView(needRefreshData, index, type);
} else if (msg.what == MSG_FAVORITE) {
Bundle data = msg.getData();
String strJson = data.getString(KEY_DATA);
data.clear();
Favorite.mFavorite = new Favorite(strJson);
refreshFavorite();
} else if (MSG_ERROR == msg.what) {
refreshFavorite();
Bundle data = msg.getData();
String strError = data.getString(KEY_DATA);
data.clear();
if (strError == null) {
strError = NetWorkManager.MSG_NONET;
}
// 连接服务器失败
Toast.makeText(getBaseContext(), strError, Toast.LENGTH_SHORT)
.show();
mFlagLoadMore = true;
}
showProgress(false);
mPTRListView.onRefreshComplete();
return true;
}
private boolean updateBadgeView(boolean needRefreshData, int index, String type) {
if (mMember.beanType == BeanType.REFER) {
if (mMember.referType == ReferType.REPLY) {
int count = 0;
if (-1 != index) {
if (type.equals(ACTION_DELETE)) {
Refer refer = null;
for (Object obj : mList) {
refer = (Refer) obj;
if (index == refer.index) {
break;
}
refer = null;
}
if (refer == null || refer.is_read) {
if (needRefreshData) {
startThread(false, 1, true);
}
return true;
}
}
count = mBBSMgr
.getBBSNotificationRefer(ReferType.REPLY) - 1;
}
mBBSMgr.setBBSNotificationRefer(
ReferType.REPLY, count);
NotificationMgr.getInstance().cancel(NotifyType.REPLY);
if (count > 0) {
mReplyBV.setText(count + "");
} else {
mReplyBV.hide(true);
}
} else if (mMember.referType == ReferType.AT) {
int count = 0;
if (-1 != index) {
if (type.equals(ACTION_DELETE)) {
Refer refer = null;
for (Object obj : mList) {
refer = (Refer) obj;
if (index == refer.index) {
break;
}
refer = null;
}
if (refer == null || refer.is_read) {
if (needRefreshData) {
startThread(false, 1, true);
}
return true;
}
}
count = mBBSMgr
.getBBSNotificationRefer(ReferType.AT) - 1;
}
mBBSMgr.setBBSNotificationRefer(ReferType.AT,
count);
NotificationMgr.getInstance().cancel(NotifyType.AT);
if (count > 0) {
mAtBV.setText(count + "");
} else {
mAtBV.hide(true);
}
}
} else if (mMember.beanType == BeanType.MAILBOX) {
if (type.equals(ACTION_DELETE)) {
boolean flag = true;
if (-1 != index) {
flag = false;
Mail mail;
for (Object obj : mList) {
mail = (Mail) obj;
if (index == mail.index) {
if (!mail.is_read) {
flag = true;
}
break;
}
}
}
if (flag) {
NotificationMgr.getInstance().cancel(NotifyType.MAIL);
mBBSMgr.setBBSNotificationMail(false);
mMailBV.hide(true);
}
}
}
if (needRefreshData) {
startThread(false, 1, true);
} else {
showProgress(false);
mPTRListView.onRefreshComplete();
}
return true;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBBSMgr = BBSManager.getInstance(this);
mIUMgr = AiYouManager.getInstance(this);
mSwitchMgr = SwitchManager.getInstance(this);
if (mSwitchMgr.isNightModeEnabled()) {
// 夜间模式
setTheme(R.style.ThemeNight);
} else {
// 日间模式
setTheme(R.style.ThemeDay);
}
int delay = 0;
mIsOpenScreen = getIntent().getBooleanExtra(KEY_OPENSCREEN, true);
if (mIsOpenScreen && ActivitySplitAnimationUtil.canPlay()
&& Build.VERSION.SDK_INT > 14) {
// 中心打开动画
ActivitySplitAnimationUtil.prepareAnimation(this);
ActivitySplitAnimationUtil.animate(this, 1000);
delay = 1000;
}
setContentView(R.layout.activity_bbs_list);
init();
Intent intent = getIntent();
boolean bReply = intent.getBooleanExtra(NotifyType.REPLY.getTag(), false);
boolean bAt = intent.getBooleanExtra(NotifyType.AT.getTag(), false);
boolean bMail = intent.getBooleanExtra(NotifyType.MAIL.getTag(), false);
if (bReply) {
mMember.beanType = BeanType.REFER;
mMember.referType = ReferType.REPLY;
showFooter(true);
mMember.title = getResources().getString(R.string.reply_me);
} else if (bAt) {
mMember.beanType = BeanType.REFER;
mMember.referType = ReferType.AT;
showFooter(true);
mMember.title = getResources().getString(R.string.at_me);
} else if (bMail) {
mMember.beanType = BeanType.MAILBOX;
mMember.mailboxType = MailboxType.INBOX;
showFooter(true);
mMember.title = getResources().getString(R.string.inbox);
} else if (mMember.beanType == BeanType.WIDGET) {
showFooter(false);
} else {
showFooter(true);
}
updateTitle();
mHandler.postDelayed(new Runnable() {
public void run() {
/**
* 查询用户信息
*/
startThread(true, 1, true);
}
}, delay);
}
@SuppressLint("RtlHardcoded")
private void init() {
FrameLayout fl = (FrameLayout) findViewById(R.id.activity_bbslist_ll);
if (mSwitchMgr.isNightModeEnabled()) {
fl.setBackgroundColor(Color.parseColor("#11000000"));
} else {
fl.setBackgroundColor(Color.parseColor("#11ffffff"));
}
mSectionIV = (ImageView) findViewById(R.id.activity_bbslist_iv_section);
mMeshLLayout = (LinearLayout) findViewById(R.id.activity_bbslist_ll_mesh);
mMember = BBSListHelper.getInstance();
mTitleLLayout = (LinearLayout) findViewById(R.id.activity_bbslist_ll_title);
mTitleSTV = (ScrollTextView) findViewById(R.id.activity_bbslist_stv_title);
mPTRListView = (PullToRefreshListView) findViewById(R.id.activity_bbslist_lv);
mPTRListView.setOnRefreshListener(this);
mPTRListView.setShowIndicator(false);
mListView = mPTRListView.getRefreshableView();
mListView.setOnItemClickListener(this);
mListView.setOnScrollListener(this);
mAdapter = new BBSListAdapter(this, mList, this);
mListView.setAdapter(mAdapter);
/**
* 菜单
*/
mMenuFLayout = (FrameLayout) findViewById(R.id.activity_bbslist_fl_menu);
mArticleMenu = (LinearLayout) findViewById(R.id.activity_bbslist_menu_ll_article);
mReferMenu = (LinearLayout) findViewById(R.id.activity_bbslist_menu_ll_refer);
mMailMenu = (LinearLayout) findViewById(R.id.activity_bbslist_menu_ll_mail);
mVoteMenu = (FrameLayout) findViewById(R.id.activity_bbslist_menu_fl_vote);
mDeletetIV = (ImageView) findViewById(R.id.activity_bbslist_menu_iv_delete_collect);
mSerchTitleIV = (ImageView) findViewById(R.id.activity_bbslist_menu_iv_search_title);
mSearchAuthorIV = (ImageView) findViewById(R.id.activity_bbslist_menu_iv_search_author);
mWriteArticleIV = (ImageView) findViewById(R.id.activity_bbslist_menu_iv_write_article);
/**
* 进度条、重试
*/
mProgressBar = (Win8ProgressBar) findViewById(R.id.progress_bar);
/**
* help
*/
mHelpImageView = (ImageView) findViewById(R.id.activity_bbslist_iv_help);
if (mSwitchMgr.needShowPageHelp()) {
mHelpImageView.setVisibility(View.VISIBLE);
mHelpImageView.bringToFront();
mSwitchMgr.disableShowPageHelp();
}
mFaceIV = (CircleImageView) findViewById(R.id.activity_bbs_list_civ_face);
mFaceBV = new BadgeView(this, mFaceIV);
mFaceBV.setText("");
mFaceBV.setUseDefaultParams(false);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
mIUMgr.dip2px(10), mIUMgr.dip2px(10));
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setMargins(0, 0, 0, 0);
mFaceBV.setLayoutParams(params);
/**
* 搜索
*/
mSearchLLayout = (LinearLayout) findViewById(R.id.activity_bbslist_ll_search);
mSearchET = (EditText) findViewById(R.id.activity_bbslist_et_search);
mSearchET.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_SEARCH:
onSearchClick(null);
break;
}
return true;
}
});
/**
* ResideMenu
*/
mResideMenu = new ResideMenu(this);
mResideMenu.setMenuListener(this);
// 背景设置
if (mSwitchMgr.isNightModeEnabled()) {
if (mSwitchMgr.isSimpleModeEnabled()) {
mResideMenu.setBackgroundColor(getResources().getColor(
R.color.bbs_background_night));
} else {
try {
mResideMenu.setBackground(R.drawable.background_night);
} catch (OutOfMemoryError e) {
mResideMenu.setBackgroundColor(getResources().getColor(
R.color.bbs_background_night));
Logcat.e(TAG, "OutOfMemoryError:" + e.getMessage());
}
}
} else {
if (mSwitchMgr.isSimpleModeEnabled()) {
mResideMenu.setBackgroundColor(getResources().getColor(
R.color.bbs_background_day));
} else {
try {
mResideMenu.setBackground(R.drawable.background_day);
} catch (OutOfMemoryError e) {
mResideMenu.setBackgroundColor(getResources().getColor(
R.color.bbs_background_day));
}
}
}
mResideMenu.attachToActivity(this);
mResideMenu.setScaleValue(0.6f);
mResideMenu.setShadowVisible(false);
// mResideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);
mHomepageItem = new ResideMenuItem(this, R.drawable.icon_home_page,
getString(R.string.topten));
mLoginItem = new ResideMenuItem(this, R.drawable.icon_login, getString(R.string.login));
if (mSwitchMgr.isNightModeEnabled()) {
mModeItem = new ResideMenuItem(this, R.drawable.icon_sun, "日间模式");
} else {
mModeItem = new ResideMenuItem(this, R.drawable.icon_moon, "夜间模式");
}
// 登录后的
mUserInfoItem = new ResideMenuItem(this);
mReplyItem = new ResideMenuItem(this, R.drawable.icon_reply_me, "回我");
mAiItem = new ResideMenuItem(this, R.drawable.icon_at_me, "@我");
mMailItem = new ResideMenuItem(this, R.drawable.icon_mail, "邮箱");
mVoteItem = new ResideMenuItem(this, R.drawable.icon_vote, "投票");
mPhotoShowItem = new ResideMenuItem(this, R.drawable.icon_photo, "贴图秀");
mHomepageItem.setOnClickListener(this);
mLoginItem.setOnClickListener(this);
mModeItem.setOnClickListener(this);
mUserInfoItem.setOnClickListener(this);
mReplyItem.setOnClickListener(this);
mAiItem.setOnClickListener(this);
mMailItem.setOnClickListener(this);
mVoteItem.setOnClickListener(this);
mPhotoShowItem.setOnClickListener(this);
mUserInfoItem.setOnClickListener(this);
mResideMenu.addMenuItem(mUserInfoItem);
mResideMenu.addMenuItem(mReplyItem);
mResideMenu.addMenuItem(mAiItem);
mResideMenu.addMenuItem(mMailItem);
mResideMenu.addMenuItem(mLoginItem);
mResideMenu.addSeparator(this, 5, RESIDE_MENU_DIVIDER);
mResideMenu.addMenuItem(mVoteItem);
if (Build.VERSION.SDK_INT >= 11) {
mResideMenu.addMenuItem(mPhotoShowItem);
}
mResideMenu.addMenuItem(mHomepageItem);
mResideMenu.addSeparator(this, 5, RESIDE_MENU_DIVIDER);
mResideMenu.addMenuItem(mModeItem);
mReplyBV = new BadgeView(this, mReplyItem);
mAtBV = new BadgeView(this, mAiItem);
mMailBV = new BadgeView(this, mMailItem);
/**
* 广播接收类
*/
mReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BBSManager.REFER_RECEIVER_ACTION);
// 注册
registerReceiver(mReceiver, filter);
/**
* 收藏版面
*/
initFavorite();
}
/**
* 点击右上角按钮,打开弹出菜单
*
* @param view
*/
public void openPopmenu(View view) {
// 全部隐藏
mArticleMenu.setVisibility(View.GONE);
mReferMenu.setVisibility(View.GONE);
mMailMenu.setVisibility(View.GONE);
mVoteMenu.setVisibility(View.GONE);
mDeletetIV.setVisibility(View.GONE);
mSerchTitleIV.setVisibility(View.VISIBLE);
mSearchAuthorIV.setVisibility(View.VISIBLE);
mWriteArticleIV.setVisibility(View.VISIBLE);
switch (mMember.beanType) {
case BOARD:
mArticleMenu.setVisibility(View.VISIBLE);
// guest禁用发帖
if (mUser != null && BBSManager.GUEST.equals(mUser.id)) {
mWriteArticleIV.setVisibility(View.INVISIBLE);
}
break;
case COLLECT:
mDeletetIV.setVisibility(View.VISIBLE);
break;
case MAILBOX:
mMailMenu.setVisibility(View.VISIBLE);
break;
case REFER:
mReferMenu.setVisibility(View.VISIBLE);
break;
case SEARCH:
Toast.makeText(getBaseContext(), "无可用菜单", Toast.LENGTH_SHORT)
.show();
return;
case VOTELIST:
mVoteMenu.setVisibility(View.VISIBLE);
break;
case WIDGET:
mArticleMenu.setVisibility(View.VISIBLE);
mSerchTitleIV.setVisibility(View.GONE);
mSearchAuthorIV.setVisibility(View.GONE);
mWriteArticleIV.setVisibility(View.GONE);
break;
default:
Toast.makeText(getBaseContext(), "无可用菜单", Toast.LENGTH_SHORT)
.show();
return;
}
showPopMenu(true);
}
@Override
public void onClick(View v) {
if (v == mReplyItem) {
// 回我
selectTag(BeanType.REFER, ReferType.REPLY);
} else if (v == mAiItem) {
// @我
selectTag(BeanType.REFER, ReferType.AT);
} else if (v == mMailItem) {
// 邮箱
selectTag(BeanType.MAILBOX, MailboxType.INBOX);
} else if (v == mVoteItem) {
// 投票
selectTag(BeanType.VOTELIST, VoteType.ALL);
} else if (v == mPhotoShowItem) {
// 贴图秀
startPhotoShow();
} else if (v == mLoginItem) {
// 登录
ActivityFunc.startActivityForResult(this, BBSLoginActivity.class, null,
REQUESTCODE_LOGIN);
} else if (v == mModeItem) {
// 日间|夜间模式切换
if (mSwitchMgr.isNightModeEnabled()) {
mSwitchMgr.enableNightMode(false);
} else {
mSwitchMgr.enableNightMode(true);
}
mIsOpenScreen = false;
setRelease(false);
finish();
Intent intent = new Intent(BBSListActivity.this,
BBSListActivity.class);
intent.putExtra(KEY_OPENSCREEN, mIsOpenScreen);
ActivityFunc.startActivity(BBSListActivity.this, intent);
} else if (v == mUserInfoItem) {
// 用户信息
if (null != mUser) {
ActivityFunc.startActivity(this, BBSUserInfoActivity.class, mUser,
false);
}
} else if (v == mHomepageItem) {
// 主页,即十大热点
selectTag(BeanType.WIDGET, null);
} else if (v.getId() == R.id.activity_bbslist_iv_section) {
// 打开分区列表
ActivityFunc.startActivityForResult(this, BBSSectionActivity.class,
null, REQUESTCODE_SECTION);
} else if (v == mHelpImageView) {
// 帮助
mHelpImageView.setVisibility(View.GONE);
}
}
/**
* 打开贴图秀Activity
*/
private void startPhotoShow() {
NetWorkManager.NetStatus netStatus = NetWorkManager.getInstance(getBaseContext())
.getNetworkType();
switch (netStatus) {
case NOTHING:
case NONE:
Toast.makeText(getBaseContext(), NetWorkManager.MSG_NONET, Toast.LENGTH_SHORT)
.show();
break;
case NETTYPE_WIFI:
Intent intent = new Intent(this, BBSPhotoShowActivity.class);
ActivityFunc.startActivity(BBSListActivity.this, intent);
break;
case NETTYPE_CMWAP:
case NETTYPE_CMNET:
final CustomDialog dialog = new CustomDialog(this);
dialog.setMessage("非wifi网络,会产生大量流量。\n继续吗?")
.setOKButton(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
// 打开贴图秀
Intent intent = new Intent(BBSListActivity.this,
BBSPhotoShowActivity.class);
ActivityFunc.startActivity(BBSListActivity.this, intent);
}
}).setCancelButton(null).show();
break;
}
}
private void selectTag(BeanType type, Object subType) {
HttpManager.getInstance(getBaseContext()).disconnect(getBaseContext());
mMember.beanType = type;
switch (mMember.beanType) {
case BOARD:
mMember.beanType = BeanType.BOARD;
Board board = (Board) subType;
mMember.boardName = board.name;
mMember.title = board.description;
updateTitle();
showFooter(true);
break;
case COLLECT:
mMember.title = getString(R.string.collect);
showFooter(false);
break;
case MAILBOX:
mMember.mailboxType = (MailboxType) subType;
switch (mMember.mailboxType) {
case DELETED:
mMember.title = getString(R.string.deleted);
break;
case INBOX:
mMember.title = getString(R.string.inbox);
NotificationMgr.getInstance().cancel(NotifyType.MAIL);
break;
case OUTBOX:
mMember.title = getString(R.string.outbox);
break;
}
showFooter(true);
break;
case REFER:
mMember.referType = (ReferType) subType;
switch (mMember.referType) {
case AT:
mMember.title = getString(R.string.at_me);
NotificationMgr.getInstance().cancel(NotifyType.AT);
break;
case REPLY:
mMember.title = getString(R.string.reply_me);
NotificationMgr.getInstance().cancel(NotifyType.REPLY);
break;
}
showFooter(true);
break;
case SEARCH:
break;
case VOTELIST:
mMember.voteType = (VoteType) subType;
switch (mMember.voteType) {
case ALL:
mMember.title = getString(R.string.vote_all);
break;
case HOT:
mMember.title = getString(R.string.vote_hot);
break;
case JOIN:
mMember.title = getString(R.string.vote_join);
break;
case ME:
mMember.title = getString(R.string.vote_me);
break;
case NEW:
mMember.title = getString(R.string.vote_newest);
break;
}
showFooter(true);
break;
case WIDGET:
mMember.title = getString(R.string.topten);
showFooter(false);
break;
}
updateTitle();
startThread(false, 1, true);
}
/**
* 弹出菜单的点击事件
*
* @param view
*/
public void onMenuClick(View view) {
int nId = view.getId();
switch (nId) {
case R.id.activity_bbslist_fl_menu:
// 关闭menu
break;
case R.id.activity_bbslist_menu_iv_collect:
// 查看收藏
selectTag(BeanType.COLLECT, null);
break;
case R.id.activity_bbslist_menu_iv_write_article: {
// 撰写文章
Intent intent = new Intent(BBSListActivity.this,
BBSWriteActivity.class);
intent.putExtra(BBSWriteActivity.WRITE_ARTICLE, mMember.getBoard());
ActivityFunc.startActivity(BBSListActivity.this, intent);
break;
}
case R.id.activity_bbslist_menu_iv_search_title:
// 查主题
showSearch(true, true);
break;
case R.id.activity_bbslist_menu_iv_search_author:
// 查作者
showSearch(true, false);
break;
case R.id.activity_bbslist_menu_iv_delete_refer: {
// 删除所有提醒
final CustomDialog dialog = new CustomDialog(this);
dialog.setMessage("确定删除所有提醒吗?")
.setOKButton(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
showPopMenu(false);
startOperationThread(-1, ACTION_DELETE);
}
}).setCancelButton(null).show();
return;
}
case R.id.activity_bbslist_menu_bt_read:
// 所有提醒标为已读
startOperationThread(-1, ACTION_SET_READ);
break;
case R.id.activity_bbslist_menu_iv_delete_mail: {
// 删除所有邮件
final CustomDialog dialog = new CustomDialog(this);
dialog.setMessage("确定删除当前所有邮件吗?")
.setOKButton(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
showPopMenu(false);
startOperationThread(-1, ACTION_DELETE);
}
}).setCancelButton(null).show();
return;
}
case R.id.activity_bbslist_menu_iv_write_mail: {
// 发邮件
Intent intent = new Intent(BBSListActivity.this,
BBSWriteActivity.class);
ActivityFunc.startActivity(BBSListActivity.this, intent);
break;
}
case R.id.activity_bbslist_menu_bt_all:
// 所有投票
selectTag(BeanType.VOTELIST, VoteType.ALL);
break;
case R.id.activity_bbslist_menu_bt_new:
// 最新投票
selectTag(BeanType.VOTELIST, VoteType.NEW);
break;
case R.id.activity_bbslist_menu_bt_hot:
// 热门投票
selectTag(BeanType.VOTELIST, VoteType.HOT);
break;
case R.id.activity_bbslist_menu_bt_me:
// 我的投票
selectTag(BeanType.VOTELIST, VoteType.ME);
break;
case R.id.activity_bbslist_menu_bt_join:
// 我参与的投票
selectTag(BeanType.VOTELIST, VoteType.JOIN);
break;
case R.id.activity_bbslist_menu_iv_delete_collect: {
// 删除收藏
final CustomDialog dialog = new CustomDialog(this);
dialog.setMessage("确定清空收藏吗?")
.setOKButton(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
showPopMenu(false);
BBSManager.clearArticleCollect();
startThread(false, 1, true);
}
}).setCancelButton(null).show();
return;
}
}
showPopMenu(false);
}
/**
* 点击搜索
*
* @param view
*/
public void onSearchClick(View view) {
int nId = 0;
if (view != null) {
nId = view.getId();
}
if (R.id.activity_bbslist_iv_search == nId || null == view) {
mMember.searchTitle = mSearchET.getText().toString();
if (TextUtils.isEmpty((mMember.searchTitle))) {
Toast.makeText(getBaseContext(), "请输入搜索内容", Toast.LENGTH_SHORT).show();
} else {
// 隐藏 输入法
AiYouManager.viewInputMethod(BBSListActivity.this, false, mSearchET);
startThread(false, 1, true);
}
} else if (R.id.activity_bbslist_iv_clearsearch == nId) {
showSearch(false, false);
}
}
/**
* 启动线程
*
* @param isUserQuery
* @param page
* @param showProgress 是否显示进度条
*/
private void startThread(boolean isUserQuery, int page, boolean showProgress) {
/**
* 刷新而非加载更多时,设置进度条状态,清空列表
*/
if (page == 1) {
if (showProgress) {
showProgress(true);
}
clearListView();
}
if (isUserQuery) {
threadUserQuery();
} else {
/**
* 收藏
*/
if (mMember.beanType == BeanType.COLLECT) {
if (showProgress) {
showProgress(true);
}
clearListView();
Article[] article = BBSManager.getArticleCollect();
if (null == article || article.length == 0) {
Toast.makeText(getBaseContext(), "还没有收藏", Toast.LENGTH_SHORT)
.show();
} else {
mList.addAll(Arrays.asList(article));
mAdapter.notifyDataSetChanged();
}
// 后续工作
showProgress(false);
mHandler.post(new Runnable() {
@Override
public void run() {
mPTRListView.onRefreshComplete();
}
});
} else {
threadGetList(page);
}
}
}
/**
* 启动操作线程
*
* @param index -1删除所有
* @param type 操作类型:delete——删除;setRead——标记为已读
*/
private void startOperationThread(final int index, final String type) {
if (index <= -1 || !type.equals(ACTION_SET_READ)) {
showProgress(true);
}
threadOperation(index, type);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Intent intent = null;
switch (mMember.beanType) {
case WIDGET:
case SEARCH:
case COLLECT:
case BOARD:
Article article = (Article) mList.get(position - 1);
intent = new Intent(this, BBSContentActivity.class);
intent.putExtra(BBSContentActivity.KEY_ARTICLE, article);
break;
case REFER:
Refer refer = (Refer) mList.get(position - 1);
if (!refer.is_read) {
mFaceBV.hide(true);
refer.is_read = true;
final TextView tv = (TextView) view
.findViewById(R.id.list_item_bbslist_board_tv_title);
if (mSwitchMgr.isNightModeEnabled()) {
tv.setTextColor(getResources().getColor(R.color.font_night));
} else {
tv.setTextColor(getResources().getColor(
R.color.font_black_day));
}
int count;
if (mMember.referType == ReferType.REPLY) {
count = mBBSMgr
.getBBSNotificationRefer(ReferType.REPLY) - 1;
mBBSMgr.setBBSNotificationRefer(ReferType.REPLY,
count);
if (count > 0) {
mReplyBV.setText(count + "");
} else {
mReplyBV.hide(true);
}
} else if (mMember.referType == ReferType.AT) {
count = mBBSMgr
.getBBSNotificationRefer(ReferType.AT) - 1;
mBBSMgr.setBBSNotificationRefer(ReferType.AT, count);
if (count > 0) {
mAtBV.setText(count + "");
} else {
mAtBV.hide(true);
}
}
startOperationThread(refer.index, ACTION_SET_READ);
}
intent = new Intent(this, BBSContentActivity.class);
intent.putExtra(BBSContentActivity.KEY_REFER, refer);
break;
case VOTELIST:
Vote vote = (Vote) mList.get(position - 1);
intent = new Intent(this, BBSVoteActivity.class);
intent.putExtra(BBSVoteActivity.KEY_VOTE, vote);
break;
case MAILBOX:
Mail mail = (Mail) mList.get(position - 1);
if (!mail.is_read) {
mFaceBV.hide(true);
mail.is_read = true;
final TextView tv = (TextView) view
.findViewById(R.id.list_item_bbslist_board_tv_title);
if (mSwitchMgr.isNightModeEnabled()) {
tv.setTextColor(getResources().getColor(R.color.font_night));
} else {
tv.setTextColor(getResources().getColor(
R.color.font_black_day));
}
mBBSMgr.setBBSNotificationMail(false);
mMailBV.hide(true);
}
intent = new Intent(this, BBSMailActivity.class);
intent.putExtra(BBSMailActivity.KEY_MAIL, mail);
break;
}
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityFunc.startActivity(BBSListActivity.this, intent);
}
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
startThread(false, 1, true);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
if (!loadMore(true)) {
mHandler.post(new Runnable() {
@Override
public void run() {
mPTRListView.onRefreshComplete();
}
});
}
}
private boolean loadMore(boolean showProgress) {
if (!mFlagLoadMore) {
return false;
}
mFlagLoadMore = false;
int page = mMember.getPageCurrent() + 1;
if (page > mMember.getPageTotal()) {
return false;
} else {
startThread(false, page, showProgress);
return true;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUESTCODE_LOGIN) {
// 用户登录返回的结果
User userTmp = (User) data.getSerializableExtra(BBSLoginActivity.KEY_USER);
if (null != userTmp) {
if (mUser == null || !userTmp.id.equals(mUser.id)) {
// 设置为当前用户
mUser = userTmp;
// 左侧用户窗口
updateUserWindow(mUser);
}
}
} else if (requestCode == REQUESTCODE_SECTION) {
// 分区列表返回的结果
Board board = new Board();
board.name = data.getStringExtra(BBSSectionActivity.KEY_NAME);
board.description = data.getStringExtra(BBSSectionActivity.KEY_DESC);
selectTag(BeanType.BOARD, board);
}
}
}
/**
*/
private void threadUserQuery() {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = User.query(BBSListActivity.this, mBBSMgr.getUserId());
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
String strError = JsonHelper.checkError(strJson);
if (null != strError && mHandler != null) {
// 是 错误信息
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle data = msg.getData();
data.putString(KEY_DATA, strError);
mHandler.sendMessage(msg);
return;
}
// 将json数据解析为User元数据
User user = new User(strJson);
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_USER_QUERY);
Bundle data = msg.getData();
data.putSerializable(KEY_DATA, user);
mHandler.sendMessage(msg);
}
}
});
}
/**
* 查询信息的线程
*
* @param page
*/
private void threadGetList(final int page) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = null;
Logcat.e(TAG, "page:" + page);
switch (mMember.beanType) {
case WIDGET:
strJson = Widget.getTopten(BBSListActivity.this);
break;
case BOARD:
strJson = Board.getBoard(BBSListActivity.this, mMember.boardName, page);
break;
case REFER:
strJson = Refer.getRefer(BBSListActivity.this, mMember.referType, page);
break;
case SEARCH:
strJson = Search.getSearch(BBSListActivity.this, mMember.boardName,
mMember.searchTitle, mMember.isSearchTitle, page);
break;
case VOTELIST:
strJson = VoteList.getVoteList(BBSListActivity.this, mMember.voteType,
page);
break;
case MAILBOX:
strJson = Mailbox.getMailBox(BBSListActivity.this, mMember.mailboxType,
page);
break;
case COLLECT:
break;
}
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
String strError = JsonHelper.checkError(strJson);
if (null != strError) {
// 是 错误信息
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle data = msg.getData();
data.putString(KEY_DATA, strError);
mHandler.sendMessage(msg);
}
return;
}
// 将json数据解析为元数据
updateBBSListMember(strJson);
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_GET_LIST);
}
}
});
}
/**
* 操作的线程,由 {@link #startOperationThread(int, String)} 启动
*
* @param index -1删除所有
* @param type 操作类型:ACTION_DELETE——删除;ACTION_SET_READ——标记为已读
*/
private void threadOperation(final int index, final String type) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
Bundle data = new Bundle();
data.putBoolean(KEY_REFRESH_DATA, true);
data.putInt(KEY_INDEX, index);
data.putString(KEY_TYPE, type);
String strJson = null;
switch (mMember.beanType) {
case REFER:
if (ACTION_DELETE.equals(type)) {
if (-1 == index) {
// 全部删除
strJson = Refer.deleteRefer(BBSListActivity.this,
mMember.referType);
} else {
// 删除一条
strJson = Refer.deleteRefer(BBSListActivity.this,
mMember.referType,
index);
}
} else if (ACTION_SET_READ.equals(type)) {
if (-1 == index) {
// 全部标记为已读
strJson = Refer
.setRead(BBSListActivity.this, mMember.referType);
} else {
data.putBoolean(KEY_REFRESH_DATA, false);
strJson = Refer
.setRead(BBSListActivity.this, mMember.referType, index);
}
}
break;
case MAILBOX:
if (-1 == index) {
// 删除list中所有邮件
Mail mail;
for (AdapterInterface adapterInterface : mList) {
mail = (Mail) adapterInterface;
if (null != mail) {
strJson = Mail.deleteMail(BBSListActivity.this,
MailboxType.INBOX,
mail.index);
}
}
} else {
// 删除一封邮件
strJson = Mail.deleteMail(BBSListActivity.this, MailboxType.INBOX,
index);
}
break;
default:
break;
}
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
}
String strError = JsonHelper.checkError(strJson);
if (null != strError) {
// 是 错误信息
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle bundle = msg.getData();
bundle.putString(KEY_DATA, strError);
mHandler.sendMessage(msg);
}
return;
}
if (null != mHandler) {
Message msg = mHandler.obtainMessage(MSG_OPERATION);
msg.setData(data);
mHandler.sendMessage(msg);
}
}
});
}
/**
* 更新用户信息窗口
*
* @param user
*/
private void updateUserWindow(User user) {
if (user == null) {
return;
}
mReplyItem.setVisibility(View.GONE);
mAiItem.setVisibility(View.GONE);
mMailItem.setVisibility(View.GONE);
mVoteItem.setVisibility(View.GONE);
mLoginItem.setVisibility(View.GONE);
if (null != user.id && !BBSManager.GUEST.equals(user.id)) {
mReplyItem.setVisibility(View.VISIBLE);
mAiItem.setVisibility(View.VISIBLE);
mMailItem.setVisibility(View.VISIBLE);
mVoteItem.setVisibility(View.VISIBLE);
mMailBV.setText("新");
int count;
count = mBBSMgr.getBBSNotificationRefer(ReferType.REPLY);
if (0 != count) {
mReplyBV.setText(count + "");
mReplyBV.show(true);
mFaceBV.show(true);
}
count = mBBSMgr.getBBSNotificationRefer(ReferType.AT);
if (0 != count) {
mAtBV.setText(count + "");
mAtBV.show(true);
mFaceBV.show(true);
}
if (mBBSMgr.getBBSNotificationMail()) {
mMailBV.show(true);
mFaceBV.show(true);
}
} else {
mLoginItem.setVisibility(View.VISIBLE);
}
mUserInfoItem.setUserInfo(user.face_url, user.id, user.user_name);
mFaceIV.setImageUrl(user.face_url, R.drawable.iu_default_gray,
R.drawable.iu_default_green);
}
/**
* 更新BeanType变量
*/
private void updateBBSListMember(String strJson) {
switch (mMember.beanType) {
case WIDGET:
Widget widget = new Widget(strJson);
mMember.updateWidget(widget);
break;
case BOARD:
Board board = new Board(strJson);
mMember.updateBoard(board);
break;
case REFER:
Refer refer = new Refer(strJson);
mMember.updateRefer(refer);
break;
case SEARCH:
Search search = new Search(strJson);
mMember.updateSearch(search);
break;
case VOTELIST:
VoteList voteList = new VoteList(strJson);
mMember.updateVoteList(voteList);
break;
case MAILBOX:
Mailbox mailbox = new Mailbox(strJson);
mMember.updateMailbox(mailbox);
break;
default:
break;
}
}
/**
* 关闭Activity
*/
public void selfFinish() {
if (Build.VERSION.SDK_INT >= 14) {
ActivitySplitAnimationUtil.finish(this);
} else {
scrollToFinishActivity();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (View.VISIBLE == mMenuFLayout.getVisibility()) {
showPopMenu(false);
return true;
} else if (mResideMenu.isOpened()) {
mResideMenu.closeMenu();
return true;
}
selfFinish();
return true;
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
if (View.VISIBLE == mMenuFLayout.getVisibility()) {
showPopMenu(false);
} else {
openPopmenu(null);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void openMenu() {
mFaceBV.hide(true);
mUserInfoItem.startShimmer();
showPopMenu(false);
}
@Override
public void closeMenu() {
}
@Override
protected void onDestroy() {
super.onDestroy();
/**
* 注销广播接收器
*/
unregisterReceiver(mReceiver);
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
mList.clear();
mList = null;
mAdapter = null;
// mUser = null;
ActivitySplitAnimationUtil.cancel();
// 设置版面类型
if (mMember.beanType == BeanType.SEARCH) {
mMember.beanType = BeanType.BOARD;
}
System.gc();
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return mResideMenu.dispatchTouchEvent(ev);
}
/**
* 清空listview
*/
private void clearListView() {
mFlagLoadMore = false;
mList.clear();
mAdapter.notifyDataSetChanged();
}
/**
* 设置是否显示lv_article的footer
*
* @param flag
*/
@SuppressWarnings("deprecation")
private void showFooter(boolean flag) {
if (flag) {
mPTRListView.setPullLabel("加载", Mode.PULL_FROM_END);
mPTRListView.setRefreshingLabel("正在加载...", Mode.PULL_FROM_END);
mPTRListView.setReleaseLabel("松开加载", Mode.PULL_FROM_END);
Drawable drawable = getResources().getDrawable(
R.drawable.default_ptr_rotate);
mPTRListView.setLoadingDrawable(drawable, Mode.PULL_FROM_END);
} else {
mPTRListView.setPullLabel("", Mode.PULL_FROM_END);
mPTRListView.setRefreshingLabel("", Mode.PULL_FROM_END);
mPTRListView.setReleaseLabel("", Mode.PULL_FROM_END);
mPTRListView.setLoadingDrawable(null, Mode.PULL_FROM_END);
}
}
/**
* 按左上角返回键调用的方法
*
* @param view
*/
public void openLeftMenu(View view) {
mResideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
}
/**
* 设置进度条可见
*
* @param flag
*/
private void showProgress(boolean flag) {
if (flag) {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.start();
} else {
mProgressBar.setVisibility(View.GONE);
mProgressBar.stop();
}
}
/**
* 接口方法
*/
@Override
public void onRayMenuClick(final int position) {
View v = mListView.getChildAt(position + 1
- mListView.getFirstVisiblePosition());
FrameLayout fl_cache = (FrameLayout) v.findViewById(R.id.list_item_bbslist_board_fl_cache);
fl_cache.setDrawingCacheEnabled(true);
Bitmap bmp = Bitmap.createBitmap(fl_cache.getDrawingCache());
fl_cache.setDrawingCacheEnabled(false);
int[] location = new int[2];
fl_cache.getLocationOnScreen(location);
/**
* 播放吸入动画
*/
startMesh(bmp, location, fl_cache.getHeight());
/**
* 将文章加入收藏
*/
if (BeanType.BOARD == mMember.beanType
|| BeanType.WIDGET == mMember.beanType
|| BeanType.SEARCH == mMember.beanType) {
Article article = (Article) mList.get(position);
BBSManager.putArticleCollect(article);
if (Build.VERSION.SDK_INT < 11) {
Toast.makeText(getBaseContext(), "收藏成功", Toast.LENGTH_SHORT).show();
}
}
int delay = 800;
if (Build.VERSION.SDK_INT < 11) {
delay = 0;
}
/**
* 删除该条收藏
*/
if (BeanType.COLLECT == mMember.beanType) {
Article article = (Article) mList.get(position);
BBSManager.deleteArticleCollect(article);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
startThread(false, 1, true);
}
}, delay);
}
/**
* 删除该条refer
*/
if (BeanType.REFER == mMember.beanType) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
Refer refer = (Refer) mList.get(position);
startOperationThread(refer.index, ACTION_DELETE);
}
}, delay);
}
/**
* 删除该条mail
*/
if (BeanType.MAILBOX == mMember.beanType) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
Mail mail = (Mail) mList.get(position);
startOperationThread(mail.index, ACTION_DELETE);
}
}, delay);
}
}
/**
* 播放吸入动画的方法
*
* @param bmp
* @param location
* @param viewHeight
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void startMesh(Bitmap bmp, int[] location, int viewHeight) {
if (Build.VERSION.SDK_INT < 11) {
return;
}
// 显示标题栏
mTitleLLayout.clearAnimation();
mSectionIV.clearAnimation();
mTitleLLayout.setTag(null);
if (View.VISIBLE != mTitleLLayout.getVisibility()) {
mTitleLLayout.setVisibility(View.VISIBLE);
mSectionIV.setVisibility(View.VISIBLE);
}
/**
* 计算y轴偏移量
*/
mMeshLLayout.setPadding(0, 0, 0, AiYouManager.getScreenHeight() - location[1]
- viewHeight);
if (null == mMeshView) {
// 初始化
mMeshView = new BitmapMesh.MeshView(this, bmp);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
mMeshView.setLayoutParams(params);
mMeshView.setRotation(180);
mMeshLLayout.addView(mMeshView);
} else {
// 设置Bitmap
mMeshView.setBitmap(bmp);
}
mMeshView.startAnimation(false);
}
/**
* 设置标题
*/
private void updateTitle() {
mTitleSTV.setText(mMember.title);
if (View.VISIBLE == mSearchLLayout.getVisibility()) {
showSearch(false, false);
} else {
mTitleSTV.setVisibility(View.VISIBLE);
}
}
/**
* 显示/隐藏搜索栏
*
* @param flag true:显示;false:隐藏
* @param searchIsTitle 搜主题还是搜作者
*/
private void showSearch(boolean flag, boolean searchIsTitle) {
if (flag) {
// 设置版面类型
mMember.beanType = BeanType.SEARCH;
// 设置搜索类型
mMember.isSearchTitle = searchIsTitle;
if (searchIsTitle) {
mSearchET.setHint("搜主题");
} else {
mSearchET.setHint("搜作者");
}
// 显示搜索栏
Animation anim = AnimationUtils.loadAnimation(this,
R.anim.search_enter);
mSearchLLayout.setVisibility(View.VISIBLE);
mTitleSTV.setVisibility(View.GONE);
mSearchLLayout.startAnimation(anim);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
mSearchLLayout.clearAnimation();
// 打开输入法
AiYouManager.viewInputMethod(BBSListActivity.this, true, mSearchET);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
} else {
// 设置版面类型
if (mMember.beanType == BeanType.SEARCH) {
mMember.beanType = BeanType.BOARD;
}
// 隐藏 输入法
AiYouManager.viewInputMethod(BBSListActivity.this, false, mSearchET);
// 隐藏搜索栏
Animation anim = AnimationUtils.loadAnimation(this,
R.anim.search_exit);
mSearchLLayout.startAnimation(anim);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
mSearchLLayout.setVisibility(View.GONE);
mTitleSTV.setVisibility(View.VISIBLE);
mSearchLLayout.clearAnimation();
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
}
}
/**
* 广播接收器
*
* @author user
*/
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotifyType type = (NotifyType) intent.getSerializableExtra(BBSService.KEY_TYPE);
if (type == null) {
return;
}
int count;
switch (type) {
case AT:
count = intent.getIntExtra(BBSService.KEY_NEW_COUNT, 0);
mAtBV.setText(count + "");
mAtBV.show(true);
break;
case MAIL:
mMailBV.show(true);
break;
case REPLY:
count = intent.getIntExtra(BBSService.KEY_NEW_COUNT, 0);
mReplyBV.setText(count + "");
mReplyBV.show(true);
break;
default:
break;
}
mFaceBV.show(true);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (firstVisibleItem <= 1) {
mCurrentItem = 1;
mTitleLLayout.clearAnimation();
mSectionIV.clearAnimation();
mTitleLLayout.setTag(null);
if (View.VISIBLE != mTitleLLayout.getVisibility()) {
showTitle(true);
}
} else {
if (mTitleLLayout.getTag() == null) {
if (mCurrentItem < firstVisibleItem
&& View.VISIBLE == mTitleLLayout.getVisibility()) {
showTitle(false);
} else if (mCurrentItem > firstVisibleItem
&& View.VISIBLE != mTitleLLayout.getVisibility()) {
showTitle(true);
}
mCurrentItem = firstVisibleItem;
}
}
if (mMember.beanType == BeanType.REFER) {
return;
}
// 自动加载
if (firstVisibleItem + visibleItemCount * 2 >= totalItemCount) {
loadMore(false);
}
}
/**
* 显示/隐藏Menu
*
* @param flag
*/
@SuppressWarnings("deprecation")
private void showPopMenu(boolean flag) {
Animation anim;
if (flag) {
if (View.VISIBLE == mMenuFLayout.getVisibility()) {
return;
}
if (mSwitchMgr.isSimpleModeEnabled()) {
if (mSwitchMgr.isNightModeEnabled()) {
mMenuFLayout.setBackgroundColor(getResources().getColor(
R.color.bbs_background_night));
} else {
mMenuFLayout.setBackgroundColor(getResources().getColor(
R.color.bbs_background_day));
}
} else {
Drawable drawable = AiYouManager.getBlurBg(BBSListActivity.this);
if (null != drawable) {
mMenuFLayout.setBackgroundDrawable(drawable);
} else {
if (mSwitchMgr.isNightModeEnabled()) {
mMenuFLayout.setBackgroundColor(getResources().getColor(
R.color.bbs_background_night));
} else {
mMenuFLayout.setBackgroundColor(getResources().getColor(
R.color.bbs_background_day));
}
}
}
anim = AnimationUtils.loadAnimation(getBaseContext(),
android.R.anim.fade_in);
mMenuFLayout.setVisibility(View.VISIBLE);
} else {
if (View.VISIBLE != mMenuFLayout.getVisibility()) {
return;
}
anim = AnimationUtils.loadAnimation(getBaseContext(),
android.R.anim.fade_out);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
mMenuFLayout.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
if (null != anim) {
mMenuFLayout.startAnimation(anim);
}
}
/**
* 是否显示标题栏
*
* @param flag
*/
private void showTitle(final boolean flag) {
Animation anim;
Animation anim2;
mTitleLLayout.setTag("anim");
if (flag) {
anim = AnimationUtils.loadAnimation(this, R.anim.slide_in_from_top);
anim.setDuration(1000);
mTitleLLayout.setVisibility(View.VISIBLE);
mTitleLLayout.startAnimation(anim);
anim2 = AnimationUtils.loadAnimation(this,
R.anim.slide_in_from_bottom);
anim2.setDuration(1000);
mSectionIV.setVisibility(View.VISIBLE);
mSectionIV.startAnimation(anim2);
} else {
anim = AnimationUtils.loadAnimation(this, R.anim.slide_out_to_top);
anim.setDuration(1000);
mTitleLLayout.startAnimation(anim);
anim2 = AnimationUtils.loadAnimation(this,
R.anim.slide_out_to_bottom);
anim2.setDuration(1000);
mSectionIV.startAnimation(anim2);
}
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
if (!flag) {
mTitleLLayout.setVisibility(View.GONE);
}
mTitleLLayout.setTag(null);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
anim2.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
if (!flag) {
mSectionIV.setVisibility(View.GONE);
}
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
}
@Override
protected void onResume() {
super.onResume();
if (Favorite.mFavorite == null) {
threadGetFavorite();
} else {
refreshFavorite();
}
}
private void refreshFavorite() {
mFavoriteList.clear();
if (Favorite.mFavorite != null
&& Favorite.mFavorite.boards != null
&& !Favorite.mFavorite.boards.isEmpty()) {
mFavoriteList.addAll(Favorite.mFavorite.boards);
}
mFavoriteAdapter.notifyDataSetChanged();
}
private void initFavorite() {
mFavoriteAdapter = new FavoriteAdapter(this, mFavoriteList,
new DeleteFavoriteListener() {
@Override
public void onDelete(Board board) {
threadDeleteFavorite(board);
}
});
mResideMenu.setAdapter(mFavoriteAdapter);
mResideMenu.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Board board = mFavoriteList.get(position);
selectTag(BeanType.BOARD, board);
}
});
}
private void threadDeleteFavorite(final Board board) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = Favorite.deleteFavorite(BBSListActivity.this, 0, board.name);
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
String strError = JsonHelper.checkError(strJson);
if (strError != null) {
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle data = msg.getData();
data.putString(KEY_DATA, strError);
mHandler.sendMessage(msg);
}
return;
}
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_FAVORITE);
Bundle data = msg.getData();
data.putString(KEY_DATA, strJson);
mHandler.sendMessage(msg);
}
}
});
}
private void threadGetFavorite() {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = Favorite.getFavorite(BBSListActivity.this, 0);
if (!TextUtils.isEmpty(strJson) && JsonHelper.checkError(strJson) == null) {
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_FAVORITE);
Bundle data = msg.getData();
data.putString(KEY_DATA, strJson);
mHandler.sendMessage(msg);
}
}
}
});
}
}