package com.troy.xifan.fragment;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.BindView;
import com.bumptech.glide.Glide;
import com.chenenyu.router.Router;
import com.troy.xifan.App;
import com.troy.xifan.R;
import com.troy.xifan.activity.ConversationActivity;
import com.troy.xifan.activity.ProfileActivity;
import com.troy.xifan.activity.UserListActivity;
import com.troy.xifan.adapter.ProfilePagerAdapter;
import com.troy.xifan.config.Constants;
import com.troy.xifan.http.HttpRequestFactory;
import com.troy.xifan.http.callback.SimpleHttpRequestCallback;
import com.troy.xifan.http.exception.ApiException;
import com.troy.xifan.http.request.BaseRequestParams;
import com.troy.xifan.http.request.FriendshipRequest;
import com.troy.xifan.model.response.UserRes;
import com.troy.xifan.util.SharedPreUtils;
import com.troy.xifan.util.UIUtils;
import de.hdodenhof.circleimageview.CircleImageView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by chenlongfei on 2016/12/1.
*/
public class ProfileFragment extends BaseFragment {
@BindView(R.id.collapsing_toolbar_layout) CollapsingToolbarLayout mCollapsingToolbarLayout;
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.tab_layout) TabLayout mTabLayout;
@BindView(R.id.view_pager) ViewPager mViewPager;
@BindView(R.id.image_profile_bg) ImageView mImageProfileBackground;
@BindView(R.id.text_user_info) TextView mTextUserInfo;
@BindView(R.id.image_avatar) CircleImageView mImageAvatar;
@BindView(R.id.view_dm_follow) View mViewDmFollow;
@BindView(R.id.button_dm) Button mButtonDM;
@BindView(R.id.button_follow) Button mButtonFollow;
@BindView(R.id.layout_following) View mLayoutFriend;
@BindView(R.id.layout_follower) View mLayoutFollower;
@BindView(R.id.text_status_count) TextView mTextStatusCount;
@BindView(R.id.text_following_count) TextView mTextFollowingCount;
@BindView(R.id.text_follower_count) TextView mTextFollowerCount;
private Bundle mBundle;
private UserRes mUser;
private String mUserId;
private List<Fragment> mFragments = new ArrayList<>();
private String[] mTabtitles;
private boolean isSelf;
private boolean isFollowing;
public static Fragment newInstance() {
return new ProfileFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBundle = getArguments();
if (mBundle != null) {
mUser = mBundle.getParcelable(ProfileActivity.BUNDLE_USER);
mUserId = mBundle.getString(ProfileActivity.BUNDLE_USER_ID);
isSelf = false;
} else {
mUser = App.getInstance().getUser();
isSelf = true;
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
if (mUser != null) {
initFragments();
initViews();
} else {
getUserInfo();
}
}
private void initFragments() {
Bundle bundle = new Bundle();
bundle.putParcelable(ProfileActivity.BUNDLE_USER, mUser);
mFragments.add(UserTimelineFragment.newInstance(bundle));
mFragments.add(UserFavoriteFragment.newInstance(bundle));
mFragments.add(UserPhotoFragment.newInstance(bundle));
}
@Override
public void initViews() {
mToolbar.setTitle(mUser.getName());
mCollapsingToolbarLayout.setCollapsedTitleTextColor(
getResources().getColor(android.R.color.white));
mCollapsingToolbarLayout.setExpandedTitleColor(
getResources().getColor(android.R.color.transparent));
mToolbar.inflateMenu(R.menu.menu_profile);
mTabtitles = new String[] {
getString(R.string.title_tab_profile_all),
getString(R.string.title_tab_profile_favorite),
getString(R.string.title_tab_profile_photo)
};
mTabLayout.setupWithViewPager(mViewPager);
mViewPager.setOffscreenPageLimit(mTabtitles.length);
mViewPager.setAdapter(
new ProfilePagerAdapter(getChildFragmentManager(), mFragments, mTabtitles));
Glide.with(this)
.load(mUser.getProfile_background_image_url())
.into(mImageProfileBackground);
Glide.with(this).load(mUser.getProfile_image_url_large()).into(mImageAvatar);
mTextUserInfo.setText(mUser.getGender() + " " + mUser.getLocation());
mTextStatusCount.setText(String.valueOf(mUser.getStatuses_count()));
mTextFollowingCount.setText(String.valueOf(mUser.getFriends_count()));
mTextFollowerCount.setText(String.valueOf(mUser.getFollowers_count()));
if (!isSelf) {
Drawable backDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_white);
mToolbar.setNavigationIcon(backDrawable);
mViewDmFollow.setVisibility(View.VISIBLE);
isExistFriendship();
} else {
mViewDmFollow.setVisibility(View.GONE);
}
initListeners();
}
private void initListeners() {
mButtonDM.setOnClickListener(mClickListener);
mButtonFollow.setOnClickListener(mClickListener);
mLayoutFriend.setOnClickListener(mClickListener);
mLayoutFollower.setOnClickListener(mClickListener);
mToolbar.setOnMenuItemClickListener(mOnMenuItemClickListener);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
});
}
@Override
protected int getContentViewResId() {
return R.layout.fragment_profile;
}
@Override
public void onRefresh() {
}
private Toolbar.OnMenuItemClickListener mOnMenuItemClickListener =
new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Router.build(Constants.Router.SETTINGS).go(getActivity());
break;
}
return true;
}
};
private View.OnClickListener mClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_dm:
Bundle bundle = new Bundle();
if (mUser != null) {
bundle.putString(ConversationActivity.BUNDLE_OTHER_USER_ID, mUser.getId());
} else if (mUserId != null) {
bundle.putString(ConversationActivity.BUNDLE_OTHER_USER_ID, mUserId);
}
Router.build(Constants.Router.CONVERSATION).extras(bundle).go(getActivity());
break;
case R.id.button_follow:
if (isFollowing) {
destroyFriendshiop();
} else {
createFriendshiop();
}
break;
case R.id.layout_following:
Bundle followingBundle = new Bundle();
followingBundle.putParcelable(UserListActivity.BUNDLE_USER, mUser);
followingBundle.putString(UserListActivity.BUNLDE_TYPE,
UserListActivity.TYPE_GET_FOLLOWING);
Router.build(Constants.Router.USER_LIST)
.extras(followingBundle)
.go(getActivity());
break;
case R.id.layout_follower:
Bundle followerBundle = new Bundle();
followerBundle.putParcelable(UserListActivity.BUNDLE_USER, mUser);
followerBundle.putString(UserListActivity.BUNLDE_TYPE,
UserListActivity.TYPE_GET_FOLLOWER);
Router.build(Constants.Router.USER_LIST)
.extras(followerBundle)
.go(getActivity());
break;
}
}
};
private void getUserInfo() {
BaseRequestParams request = new BaseRequestParams();
if (mUserId != null) {
request.setId(mUserId);
}
HttpRequestFactory.getInstance()
.getUserInfo(request, new SimpleHttpRequestCallback<UserRes>() {
@Override
public void onSuccess(UserRes userRes) {
mUser = userRes;
initFragments();
initViews();
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(getActivity(), apiException.getErrorMessage());
}
});
}
private void isExistFriendship() {
String selfUserId = SharedPreUtils.getString(Constants.SharedPreferences.KEY_USER_ID);
FriendshipRequest request = new FriendshipRequest();
request.setUser_a(selfUserId);
request.setUser_b(mUser.getId());
HttpRequestFactory.getInstance()
.isExistFriendship(request, new SimpleHttpRequestCallback<String>() {
@Override
public void onSuccess(String responseData) {
try {
isFollowing = Boolean.valueOf(responseData);
if (isFollowing) {
mButtonFollow.setText(R.string.btn_text_following);
} else {
mButtonFollow.setText(R.string.btn_text_unfollowing);
}
} catch (IllegalArgumentException e) {
}
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(getActivity(), apiException.getErrorMessage());
}
});
}
private void destroyFriendshiop() {
BaseRequestParams request = new BaseRequestParams();
if (mUser != null) {
request.setId(mUser.getId());
} else if (mUserId != null) {
request.setId(mUserId);
}
request.setMode(Constants.RequestParams.MODE_LITE);
HttpRequestFactory.getInstance()
.destroyFriendship(request, new SimpleHttpRequestCallback<UserRes>() {
@Override
public void onSuccess(UserRes responseData) {
mButtonFollow.setText(R.string.btn_text_unfollowing);
isFollowing = false;
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(getActivity(), apiException.getErrorMessage());
}
});
}
private void createFriendshiop() {
BaseRequestParams request = new BaseRequestParams();
if (mUser != null) {
request.setId(mUser.getId());
} else if (mUserId != null) {
request.setId(mUserId);
}
request.setMode(Constants.RequestParams.MODE_LITE);
HttpRequestFactory.getInstance()
.createFriendship(request, new SimpleHttpRequestCallback<UserRes>() {
@Override
public void onSuccess(UserRes responseData) {
mButtonFollow.setText(R.string.btn_text_following);
isFollowing = true;
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(getActivity(), apiException.getErrorMessage());
}
});
}
}