package org.qii.weiciyuan.ui.main;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.bean.android.UnreadTabIndex;
import org.qii.weiciyuan.support.lib.LongClickableLinkMovementMethod;
import org.qii.weiciyuan.support.utils.BundleArgsConstants;
import org.qii.weiciyuan.support.utils.GlobalContext;
import org.qii.weiciyuan.support.utils.Utility;
import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment;
import org.qii.weiciyuan.ui.interfaces.AbstractAppFragment;
import org.qii.weiciyuan.ui.maintimeline.MentionsCommentTimeLineFragment;
import org.qii.weiciyuan.ui.maintimeline.MentionsWeiboTimeLineFragment;
import android.app.ActionBar;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* User: qii
* Date: 13-3-31
*/
public class MentionsTimeLine extends AbstractAppFragment
implements MainTimeLineActivity.ScrollableListFragment {
private ViewPager viewPager;
private SparseArray<Fragment> childrenFragments = new SparseArray<Fragment>();
private SparseArray<ActionBar.Tab> tabMap = new SparseArray<ActionBar.Tab>();
static final int MENTIONS_WEIBO_CHILD_POSITION = 0;
static final int MENTIONS_COMMENT_CHILD_POSITION = 1;
public static MentionsTimeLine newInstance() {
MentionsTimeLine fragment = new MentionsTimeLine();
fragment.setArguments(new Bundle());
return fragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SimpleTwoTabsListener tabListener = new SimpleTwoTabsListener(viewPager);
ActionBar.Tab mentionsWeiboTab = getWeiboTab();
if (mentionsWeiboTab == null) {
buildMentionsWeiboTab(tabListener);
}
ActionBar.Tab mentionsCommentTab = getCommentTab();
if (mentionsCommentTab == null) {
buildMentionsCommentTab(tabListener);
}
if ((((MainTimeLineActivity) getActivity()).getMenuFragment()).getCurrentIndex()
== LeftMenuFragment.MENTIONS_INDEX) {
buildActionBarAndViewPagerTitles(
((MainTimeLineActivity) getActivity()).getMenuFragment().mentionsTabIndex);
}
}
private ActionBar.Tab buildMentionsCommentTab(SimpleTwoTabsListener tabListener) {
ActionBar.Tab mentionsCommentTab;
View customView = getActivity().getLayoutInflater()
.inflate(R.layout.ab_tab_custom_view_layout, null);
((TextView) customView.findViewById(R.id.title)).setText(R.string.mentions_to_me);
mentionsCommentTab = getActivity().getActionBar().newTab().setCustomView(customView)
.setTag(MentionsCommentTimeLineFragment.class.getName())
.setTabListener(tabListener);
tabMap.append(MENTIONS_COMMENT_CHILD_POSITION, mentionsCommentTab);
return mentionsCommentTab;
}
private ActionBar.Tab buildMentionsWeiboTab(SimpleTwoTabsListener tabListener) {
ActionBar.Tab mentionsWeiboTab;
View customView = getActivity().getLayoutInflater()
.inflate(R.layout.ab_tab_custom_view_layout, null);
((TextView) customView.findViewById(R.id.title)).setText(R.string.mentions_weibo);
mentionsWeiboTab = getActivity().getActionBar().newTab().setCustomView(customView)
.setTag(MentionsWeiboTimeLineFragment.class.getName()).setTabListener(tabListener);
tabMap.append(MENTIONS_WEIBO_CHILD_POSITION, mentionsWeiboTab);
return mentionsWeiboTab;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager_layout, container, false);
viewPager = (ViewPager) view;
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewPager.setOverScrollMode(View.OVER_SCROLL_NEVER);
viewPager.setOffscreenPageLimit(2);
viewPager.setOnPageChangeListener(onPageChangeListener);
MentionsTimeLinePagerAdapter adapter = new MentionsTimeLinePagerAdapter(this, viewPager,
getChildFragmentManager(), childrenFragments);
viewPager.setAdapter(adapter);
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
int mentionsTabIndex = getArguments().getInt("mentionsTabIndex");
buildActionBarAndViewPagerTitles(mentionsTabIndex);
}
}
@Override
public void onResume() {
super.onResume();
Intent intent = getActivity().getIntent();
if (intent == null) {
return;
}
UnreadTabIndex unreadTabIndex = (UnreadTabIndex) intent
.getSerializableExtra(BundleArgsConstants.OPEN_NAVIGATION_INDEX_EXTRA);
if (unreadTabIndex == null) {
return;
}
switch (unreadTabIndex) {
case MENTION_WEIBO:
((MainTimeLineActivity) getActivity()).getMenuFragment()
.switchCategory(LeftMenuFragment.MENTIONS_INDEX);
viewPager.setCurrentItem(0);
intent.putExtra(BundleArgsConstants.OPEN_NAVIGATION_INDEX_EXTRA,
UnreadTabIndex.NONE);
break;
case MENTION_COMMENT:
((MainTimeLineActivity) getActivity()).getMenuFragment()
.switchCategory(LeftMenuFragment.MENTIONS_INDEX);
viewPager.setCurrentItem(1);
intent.putExtra(BundleArgsConstants.OPEN_NAVIGATION_INDEX_EXTRA,
UnreadTabIndex.NONE);
break;
}
}
public void buildActionBarAndViewPagerTitles(int nav) {
((MainTimeLineActivity) getActivity()).setCurrentFragment(this);
if (Utility.isDevicePort()) {
((MainTimeLineActivity) getActivity()).setTitle(R.string.mentions);
getActivity().getActionBar().setIcon(R.drawable.repost_light);
} else {
((MainTimeLineActivity) getActivity()).setTitle("");
getActivity().getActionBar().setIcon(R.drawable.ic_launcher);
}
ActionBar actionBar = getActivity().getActionBar();
actionBar.setDisplayHomeAsUpEnabled(Utility.isDevicePort());
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.removeAllTabs();
SimpleTwoTabsListener tabListener = new SimpleTwoTabsListener(viewPager);
ActionBar.Tab mentionsWeiboTab = getWeiboTab();
if (mentionsWeiboTab == null) {
mentionsWeiboTab = buildMentionsWeiboTab(tabListener);
}
actionBar.addTab(mentionsWeiboTab);
ActionBar.Tab mentionsCommentTab = getCommentTab();
if (mentionsCommentTab == null) {
mentionsCommentTab = buildMentionsCommentTab(tabListener);
}
actionBar.addTab(mentionsCommentTab);
if (actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS && nav > -1) {
viewPager.setCurrentItem(nav, false);
}
}
public ActionBar.Tab getWeiboTab() {
return tabMap.get(MENTIONS_WEIBO_CHILD_POSITION);
}
public ActionBar.Tab getCommentTab() {
return tabMap.get(MENTIONS_COMMENT_CHILD_POSITION);
}
private ViewPager.SimpleOnPageChangeListener onPageChangeListener
= new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
ActionBar ab = getActivity().getActionBar();
if (getActivity().getActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS
&& ab.getTabAt(position) == tabMap.get(position)) {
ab.setSelectedNavigationItem(position);
}
((LeftMenuFragment) ((MainTimeLineActivity) getActivity())
.getMenuFragment()).mentionsTabIndex = position;
clearActionMode();
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
switch (state) {
case ViewPager.SCROLL_STATE_SETTLING:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
LongClickableLinkMovementMethod.getInstance().setLongClickable(true);
}
}, ViewConfiguration.getLongPressTimeout());
break;
default:
LongClickableLinkMovementMethod.getInstance().setLongClickable(false);
break;
}
}
};
public MentionsCommentTimeLineFragment getMentionsCommentTimeLineFragment() {
MentionsCommentTimeLineFragment fragment
= ((MentionsCommentTimeLineFragment) getChildFragmentManager().findFragmentByTag(
MentionsCommentTimeLineFragment.class.getName()));
if (fragment == null) {
fragment = MentionsCommentTimeLineFragment.newInstance(
GlobalContext.getInstance().getAccountBean()
, GlobalContext.getInstance().getAccountBean().getInfo(),
GlobalContext.getInstance().getSpecialToken());
}
return fragment;
}
public MentionsWeiboTimeLineFragment getMentionsWeiboTimeLineFragment() {
MentionsWeiboTimeLineFragment fragment
= ((MentionsWeiboTimeLineFragment) getChildFragmentManager().findFragmentByTag(
MentionsWeiboTimeLineFragment.class.getName()));
if (fragment == null) {
fragment = MentionsWeiboTimeLineFragment.newInstance(
GlobalContext.getInstance().getAccountBean()
, GlobalContext.getInstance().getAccountBean().getInfo(),
GlobalContext.getInstance().getSpecialToken());
}
return fragment;
}
@Override
public void scrollToTop() {
AbstractTimeLineFragment fragment = (AbstractTimeLineFragment) (childrenFragments
.get(viewPager.getCurrentItem()));
Utility.stopListViewScrollingAndScrollToTop(fragment.getListView());
}
public void clearActionMode() {
getMentionsCommentTimeLineFragment().clearActionMode();
getMentionsWeiboTimeLineFragment().clearActionMode();
}
}