package com.xda.one.ui;
import com.makeramen.RoundedImageView;
import com.squareup.picasso.Picasso;
import com.xda.one.R;
import com.xda.one.api.model.response.ResponseUserProfile;
import com.xda.one.ui.widget.TabLayout;
import com.xda.one.util.CompatUtils;
import com.xda.one.util.UIUtils;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class UserProfileFragment extends Fragment
implements UserProfileAboutFragment.Callback {
private static final String USER_ID_ARGUMENT = "user_id";
private static final float PHOTO_ASPECT_RATIO = 5f;
private View mPhotoViewContainer;
private ImageView mPhotoView;
private View mHeaderBackground;
private View mHeaderContent;
private int mActionBarSize;
private int mPhotoHeightPixels;
private int mHeaderHeightPixels;
private UserProfileFragmentPagerAdapter mAdapter;
private TabLayout mSlidingTabLayout;
private int mSlidingTabLayoutHeightPixels;
private ImageView mAvatar;
private String mUserId;
private TextView mUsernameTextView;
private TextView mTagTextView;
public static UserProfileFragment createInstance(final String userId) {
final Bundle bundle = new Bundle();
bundle.putString(USER_ID_ARGUMENT, userId);
UserProfileFragment fragment = new UserProfileFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserId = getArguments().getString(USER_ID_ARGUMENT);
mAdapter = new UserProfileFragmentPagerAdapter(getChildFragmentManager());
}
@Override
public View onCreateView(final LayoutInflater inflater, final @Nullable ViewGroup container,
final @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.user_profile_fragment, container, false);
}
@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
mHeaderBackground = view.findViewById(R.id.user_profile_header_background);
mUsernameTextView = (TextView) view.findViewById(R.id.header_user_name);
mTagTextView = (TextView) view.findViewById(R.id.header_user_stuff);
mAvatar = (RoundedImageView) view.findViewById(R.id.avatar);
CompatUtils.setBackground(mAvatar, new ColorDrawable(getResources()
.getColor(android.R.color.white)));
mPhotoViewContainer = view.findViewById(R.id.session_photo_container);
mPhotoView = (ImageView) view.findViewById(R.id.session_photo);
mHeaderContent = view.findViewById(R.id.header_user_profile_content);
final ViewPager viewPager = (ViewPager) view.findViewById(R.id.forum_view_pager);
viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(10);
// final ActionBar actionBar = UIUtils.getSupportActionBar(getActivity());
// actionBar.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mSlidingTabLayout = (TabLayout) view.findViewById(R.id.fragment_sliding_tab_layout);
mSlidingTabLayout.setSelectedIndicatorColors(Color.WHITE);
mSlidingTabLayout.setViewPager(viewPager);
mSlidingTabLayout.setOnPageChangeListener(new PageChangeListener(viewPager));
}
@Override
public void updateHeaderHeights(final int viewHeight) {
mActionBarSize = UIUtils.calculateActionBarSize(getActivity());
mHeaderHeightPixels = mHeaderContent.getHeight();
mPhotoHeightPixels = (int) (mPhotoView.getWidth() / PHOTO_ASPECT_RATIO);
mPhotoHeightPixels = Math.min(mPhotoHeightPixels, viewHeight * 2 / 3);
mSlidingTabLayoutHeightPixels = mSlidingTabLayout.getHeight();
final ViewGroup.LayoutParams lp;
lp = mPhotoView.getLayoutParams();
if (lp.height != mPhotoHeightPixels) {
lp.height = mPhotoHeightPixels;
mPhotoView.setLayoutParams(lp);
}
}
@Override
public void onScrolled(final int scrollY) {
final float newTop = Math.max(mActionBarSize - mHeaderHeightPixels
+ mSlidingTabLayoutHeightPixels, mPhotoHeightPixels - scrollY);
mHeaderContent.setTranslationY(newTop);
mAvatar.setTranslationY(newTop);
final float alpha = (float) Math.min(scrollY, mPhotoHeightPixels - mActionBarSize) /
(float) (mPhotoHeightPixels - mActionBarSize);
mHeaderBackground.setAlpha(alpha);
// Move background photo (parallax effect)
mPhotoViewContainer.setTranslationY(-scrollY * 0.5f);
}
@Override
public void setupScrolling(final View itemView, final UserProfileAboutFragment fragment) {
final ViewGroup.LayoutParams params = itemView.getLayoutParams();
if (params.height != mPhotoHeightPixels + mHeaderHeightPixels) {
params.height = mPhotoHeightPixels + mHeaderHeightPixels;
itemView.setLayoutParams(params);
}
fragment.setTopPadding(mPhotoHeightPixels + mHeaderHeightPixels);
fragment.onScrollChanged(0, 0); // trigger scroll handling
}
@Override
public void updateHeader(final ResponseUserProfile profile) {
mUsernameTextView.setText(profile.getUserName());
mTagTextView.setText(String.format("Thanked count: %d",
profile.getThankedTimes()));
Picasso.with(getActivity())
.load(profile.getAvatarUrl())
.placeholder(R.drawable.account_circle)
.error(R.drawable.account_circle)
.into(mAvatar);
}
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
inflater.inflate(R.menu.user_profile_ab, menu);
}
@Override
public void onPrepareOptionsMenu(final Menu menu) {
final MenuItem item = menu.findItem(R.id.user_profile_ab_pm);
item.setVisible(mUserId != null);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.user_profile_ab_pm:
final String username = mUsernameTextView.getText().toString();
final DialogFragment fragment = CreateMessageFragment.createInstance(username);
fragment.show(getFragmentManager(), "createMessage");
return true;
}
return false;
}
private class UserProfileFragmentPagerAdapter extends FragmentPagerAdapter {
public UserProfileFragmentPagerAdapter(final FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return UserProfileAboutFragment.createInstance(mUserId);
}
return null;
}
@Override
public CharSequence getPageTitle(final int position) {
switch (position) {
case 0:
return getString(R.string.about);
}
return null;
}
@Override
public int getCount() {
return 1;
}
}
private class PageChangeListener extends ViewPager.SimpleOnPageChangeListener {
private final ViewPager mViewPager;
public PageChangeListener(final ViewPager viewPager) {
mViewPager = viewPager;
}
@Override
public void onPageSelected(int position) {
final UserProfileAboutFragment fragment = (UserProfileAboutFragment) mAdapter
.instantiateItem(mViewPager, position);
fragment.onPageDisplayed();
}
}
}