/* * 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.activities; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ToggleButton; import com.umeng.comm.core.beans.CommConfig; import com.umeng.comm.core.beans.Topic; import com.umeng.comm.core.constants.Constants; import com.umeng.comm.core.constants.ErrorCode; import com.umeng.comm.core.listeners.Listeners.OnResultListener; import com.umeng.comm.core.listeners.Listeners.SimpleFetchListener; import com.umeng.comm.core.nets.responses.LoginResponse; import com.umeng.comm.core.utils.CommonUtils; import com.umeng.comm.core.utils.ResFinder; import com.umeng.comm.core.utils.ResFinder.ResType; import com.umeng.comm.ui.anim.CustomAnimator; import com.umeng.comm.ui.fragments.ActiveUserFragment; import com.umeng.comm.ui.fragments.TopicFeedFragment; import com.umeng.comm.ui.mvpview.MvpTopicDetailView; import com.umeng.comm.ui.presenter.impl.TopicDetailPresenter; import com.umeng.comm.ui.widgets.ViewPagerIndicator; /** * 话题详情页 */ public class TopicDetailActivity extends BaseFragmentActivity implements OnClickListener, MvpTopicDetailView { /** * 话题详情的Fragment */ private TopicFeedFragment mDetailFragment; private ActiveUserFragment mActiveUserFragment; private Topic mTopic; private ViewPagerIndicator mIndicator; private ViewPager mViewPager; private String[] mTitles = null; private FragmentPagerAdapter mAdapter; private ToggleButton mFollowToggleBtn; private TopicDetailPresenter mPresenter; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); mPresenter = new TopicDetailPresenter(this, this); setContentView(ResFinder.getLayout("umeng_comm_topic_detail_layout")); mTopic = getIntent().getExtras().getParcelable(Constants.TAG_TOPIC); if (mTopic == null) { finish(); return; } mTitles = getResources().getStringArray( ResFinder.getResourceId(ResType.ARRAY, "umeng_comm_topic_detail_tabs")); // 根据话题的id信息初始化fragment initView(); mPresenter.onCreate(arg0); } private void initView() { mIndicator = (ViewPagerIndicator) findViewById(ResFinder.getId("indicator")); mViewPager = (ViewPager) findViewById(ResFinder.getId("viewPager")); mIndicator.setTabItemTitles(mTitles); mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { return mTitles.length; } @Override public Fragment getItem(int pos) { return getFragment(pos); } }; mViewPager.setAdapter(mAdapter); // 设置关联的ViewPager mIndicator.setViewPager(mViewPager, 0); // 初始化Header的控件跟数据 initHeader(); initTitle(); } /** * 初始化标题栏相关控件跟设置数据</br> */ private void initTitle() { findViewById(ResFinder.getId("umeng_comm_title_back_btn")).setOnClickListener(this); TextView titleTextView = (TextView) findViewById(ResFinder.getId("umeng_comm_title_tv")); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); titleTextView.setText(mTopic.name); findViewById(ResFinder.getId("umeng_comm_title_setting_btn")).setVisibility(View.GONE); } /** * 获取对应的Fragment。0:话题聚合 1:活跃用户</br> * * @param pos * @return */ private Fragment getFragment(int pos) { if (pos == 0) { if (mDetailFragment == null) { mDetailFragment = TopicFeedFragment.newTopicFeedFrmg(mTopic); } mDetailFragment.setOnAnimationListener(mListener); return mDetailFragment; } else if (pos == 1) { if (mActiveUserFragment == null) { mActiveUserFragment = ActiveUserFragment.newActiveUserFragment(mTopic); mActiveUserFragment.setOnAnimationListener(mListener); } return mActiveUserFragment; } return null; } private void initHeader() { // 话题描述 TextView topicDescTv = (TextView) findViewById(ResFinder.getId( "umeng_comm_topic_desc_tv")); String desc = mTopic.desc; String noDescStr = ResFinder.getString("umeng_comm_topic_no_desc"); boolean hasText = TextUtils.isEmpty(desc) || "null".equals(desc); String showText = hasText ? noDescStr : desc; topicDescTv.setText(showText); mFollowToggleBtn = (ToggleButton) findViewById(ResFinder.getId("umeng_comm_topic_toggle_btn")); mPresenter.checkIsFollowed(mTopic.id, new OnResultListener() { @Override public void onResult(int status) { mFollowToggleBtn.setChecked(status == 1); } }); setTopicStatus(); mFollowToggleBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CommonUtils.checkLoginAndFireCallback(TopicDetailActivity.this, new SimpleFetchListener<LoginResponse>() { @Override public void onComplete(LoginResponse response) { mFollowToggleBtn.setChecked(!mFollowToggleBtn.isChecked()); if (response.errCode != ErrorCode.NO_ERROR) { mFollowToggleBtn.setChecked(!mFollowToggleBtn.isChecked()); return; } if (mFollowToggleBtn.isChecked()) { mPresenter.cancelFollowTopic(mTopic); } else { mPresenter.followTopic(mTopic); } } }); } }); mHeaderView = (LinearLayout) findViewById(ResFinder.getId("umeng_comm_topic_header")); } private LinearLayout mHeaderView = null; private CustomAnimator mCustomAnimator = new CustomAnimator(); private OnResultListener mListener = new OnResultListener() { @Override public void onResult(int status) { if (status == 1) {// dismiss mCustomAnimator.startDismissAnimation(mHeaderView); } else if (status == 0) { // show mCustomAnimator.startShowAnimation(mHeaderView); } } }; /** * 检查当前登录用户是否已关注该话题,并设置ToggleButton的状态</br> */ private void setTopicStatus() { String loginUserId = CommConfig.getConfig().loginedUser.id; if (TextUtils.isEmpty(loginUserId)) { Log.d("###", "### user dont login..."); return; } mFollowToggleBtn.setChecked(mTopic.isFocused); } @Override public void onClick(View v) { int id = v.getId(); if (id == ResFinder.getId("umeng_comm_title_back_btn")) { finish(); } } @Override public void setToggleButtonStatus(boolean status) { mFollowToggleBtn.setClickable(true); mFollowToggleBtn.setChecked(status); } }