/*
* The MIT License (MIT)
*
* Copyright (c) 2014-2015 Umeng, Inc
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.umeng.comm.ui.fragments;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RadioButton;
import com.umeng.comm.core.beans.CommConfig;
import com.umeng.comm.core.beans.CommUser;
import com.umeng.comm.core.beans.MessageCount;
import com.umeng.comm.core.constants.Constants;
import com.umeng.comm.core.listeners.Listeners.LoginOnViewClickListener;
import com.umeng.comm.core.utils.ResFinder;
import com.umeng.comm.core.utils.ResFinder.ResType;
import com.umeng.comm.ui.activities.FindActivity;
import com.umeng.comm.ui.mvpview.MvpUnReadMsgView;
import com.umeng.comm.ui.presenter.impl.NullPresenter;
import com.umeng.comm.ui.widgets.SegmentView;
import com.umeng.comm.ui.widgets.SegmentView.OnItemCheckedListener;
/**
* 社区首页,包含关注、推荐、话题三个tab的页面,通过ViewPager管理页面之间的切换.
*/
public class CommunityMainFragment extends BaseFragment<Void, NullPresenter> implements
OnClickListener, MvpUnReadMsgView {
private ViewPager mViewPager;
private String[] mTitles;
private Fragment mCurrentFragment;
/**
* Feed流页面
*/
private AllFeedsFragment mMainFeedFragment;
/**
* 推荐Feed页面
*/
private RecommendFeedFragment mRecommendFragment;
/**
* 话题页面
*/
private TopicFragment mTopicFragment;
/**
* 回退按钮的可见性
*/
private int mBackButtonVisible = View.VISIBLE;
/**
* 跳转到话题搜索按钮的可见性
*/
private int mTitleVisible = View.VISIBLE;
/**
* title的根布局
*/
private View mTitleLayout;
/**
* 右上角的个人信息Button
*/
private ImageView mProfileBtn;
private String mContainerClass;
/**
* tab视图
*/
private SegmentView mSegmentView;
/**
* 未读消息的数量
*/
private MessageCount mUnreadMsg = CommConfig.getConfig().mMessageCount;
/**
* 含有未读消息时的红点视图
*/
private View mBadgeView;
@Override
protected int getFragmentLayout() {
return ResFinder.getLayout("umeng_comm_community_frag_layout");
}
protected void initWidgets() {
mContainerClass = getActivity().getClass().getName();
initTitle(mRootView);
initFragment();
initViewPager(mRootView);
registerInitSuccessBroadcast();
}
/**
* 初始化title</br>
*
* @param context
*/
private void initTitle(View rootView) {
mTitles = getResources().getStringArray(
ResFinder.getResourceId(ResType.ARRAY, "umeng_comm_feed_titles"));
int titleLayoutResId = ResFinder.getId("topic_action_bar");
mTitleLayout = rootView.findViewById(titleLayoutResId);
mTitleLayout.setVisibility(View.GONE);
int backButtonResId = ResFinder.getId("umeng_comm_back_btn");
rootView.findViewById(backButtonResId).setOnClickListener(this);
if (mBackButtonVisible != View.VISIBLE) {
rootView.findViewById(backButtonResId).setVisibility(mBackButtonVisible);
}
mTitleLayout.setVisibility(mTitleVisible);
mBadgeView = findViewById(ResFinder.getId("umeng_comm_badge_view"));
mBadgeView.setVisibility(View.INVISIBLE);
//
mProfileBtn = (ImageView) rootView
.findViewById(ResFinder.getId("umeng_comm_user_info_btn"));
mProfileBtn.setOnClickListener(new LoginOnViewClickListener() {
@Override
protected void doAfterLogin(View v) {
if (mBadgeView != null) {
mBadgeView.setVisibility(View.INVISIBLE);
}
gotoFindActivity(CommConfig.getConfig().loginedUser);
}
});
mSegmentView = (SegmentView) rootView.findViewById(ResFinder
.getId("umeng_comm_segment_view"));
// 设置tabs
mSegmentView.setTabs(mTitles);
mSegmentView.selectItemIndex(0);
// 设置点击事件
mSegmentView.setOnItemCheckedListener(new OnItemCheckedListener() {
@Override
public void onCheck(RadioButton button, int position, String title) {
mViewPager.setCurrentItem(position, true);
}
});
}
@Override
public void onResume() {
super.onResume();
if (mUnreadMsg.unReadTotal > 0) {
mBadgeView.setVisibility(View.VISIBLE);
} else {
mBadgeView.setVisibility(View.INVISIBLE);
}
}
public ViewPager getViewPager() {
return mViewPager;
}
/**
* 跳转到发现Activity</br>
*
* @param user
*/
public void gotoFindActivity(CommUser user) {
Intent intent = new Intent(getActivity(), FindActivity.class);
if (user == null) {// 来自开发者外部调用的情况
intent.putExtra(Constants.TAG_USER, CommConfig.getConfig().loginedUser);
} else {
intent.putExtra(Constants.TAG_USER, user);
}
intent.putExtra(Constants.TYPE_CLASS, mContainerClass);
getActivity().startActivity(intent);
}
/**
* 设置回退按钮的可见性
*
* @param visible
*/
public void setBackButtonVisibility(int visible) {
if (visible == View.VISIBLE || visible == View.INVISIBLE || visible == View.GONE) {
this.mBackButtonVisible = visible;
}
}
/**
* 设置Title区域的可见性
*
* @param visible {@see View#VISIBLE},{@see View#INVISIBLE},{@see View#GONE}
*/
public void setNavTitleVisibility(int visible) {
if (visible == View.VISIBLE || visible == View.INVISIBLE || visible == View.GONE) {
mTitleVisible = visible;
}
}
/**
* 初始化ViewPager VIew</br>
*
* @param rootView
*/
private void initViewPager(View rootView) {
mViewPager = (ViewPager) rootView.findViewById(ResFinder.getId("viewPager"));
mViewPager.setOffscreenPageLimit(mTitles.length);
CommFragmentPageAdapter adapter = new CommFragmentPageAdapter(getChildFragmentManager());
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int page) {
mCurrentFragment = getFragment(page);
// mTitleTextView.selectItemWithIndex(page);
mSegmentView.selectItemIndex(page);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
class CommFragmentPageAdapter extends FragmentPagerAdapter {
public CommFragmentPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
return getFragment(pos);
}
@Override
public int getCount() {
return mTitles.length;
}
}
/**
* 初始化Fragment</br>
*/
private void initFragment() {
mMainFeedFragment = new AllFeedsFragment();
mRecommendFragment = new RecommendFeedFragment();
mTopicFragment = TopicFragment.newTopicFragment();
mCurrentFragment = mMainFeedFragment;// 默认是MainFeedFragment
}
/**
* 获取当前页面被选中的Fragment</br>
*
* @return
*/
public Fragment getCurrentFragment() {
return mCurrentFragment;
}
/**
* </br>
*
* @param pos
* @return
*/
private Fragment getFragment(int pos) {
Fragment fragment = null;
if (pos == 0) {
fragment = mMainFeedFragment;
} else if (pos == 1) {
fragment = mRecommendFragment;
} else if (pos == 2) {
fragment = mTopicFragment;
}
return fragment;
}
@Override
public void onClick(View v) {
if (v.getId() == ResFinder.getId("umeng_comm_back_btn")) {
getActivity().finish();
}
}
/**
* 隐藏MianFeedFragment的输入法,当退出fragment or activity的时候</br>
*/
public void hideCommentLayoutAndInputMethod() {
if (mMainFeedFragment != null) {
mMainFeedFragment.hideCommentLayoutAndInputMethod();
}
}
/**
* clean sub fragment data</br>
*/
public void cleanAdapterData() {
if (mMainFeedFragment != null) {
mMainFeedFragment.clearListView();
}
if (mRecommendFragment != null) {
mRecommendFragment.cleanAdapterData();
}
}
@Override
public void onFetchUnReadMsg(MessageCount unreadMsg) {
this.mUnreadMsg = unreadMsg;
if (mUnreadMsg.unReadTotal > 0) {
mBadgeView.setVisibility(View.VISIBLE);
}
}
/**
* 主动调用加载数据。 【注意】该接口仅仅在退出登录时,跳转到FeedsActivity清理数据后重新刷新数据</br>
*/
public void repeatLoadDataFromServer() {
if (mMainFeedFragment != null) {
mMainFeedFragment.loadFeedFromServer();
}
if (mRecommendFragment != null) {
mRecommendFragment.loadDataFromServer();
}
}
/**
* 注册登录成功时的广播</br>
*/
private void registerInitSuccessBroadcast() {
IntentFilter filter = new IntentFilter();
filter.addAction(Constants.ACTION_INIT_SUCCESS);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mInitConfigReceiver,
filter);
}
private BroadcastReceiver mInitConfigReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onFetchUnReadMsg(CommConfig.getConfig().mMessageCount);
}
};
@Override
public void onDestroy() {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mInitConfigReceiver);
super.onDestroy();
}
}