// Path: app/src/main/java/com/ge/protein/data/model/User.java
// @AutoValue
// public abstract class User implements Parcelable {
// 
//     public abstract long id();
// 
//     public abstract String name();
// 
//     public abstract String username();
// 
//     public abstract String html_url();
// 
//     public abstract String avatar_url();
// 
//     public abstract String bio();
// 
//     @Nullable
//     public abstract String location();
// 
//     public abstract Links links();
// 
//     public abstract long buckets_count();
// 
//     public abstract long comments_received_count();
// 
//     public abstract long followers_count();
// 
//     public abstract long followings_count();
// 
//     public abstract long likes_count();
// 
//     public abstract long likes_received_count();
// 
//     public abstract long projects_count();
// 
//     public abstract long rebounds_received_count();
// 
//     public abstract long shots_count();
// 
//     public abstract long teams_count();
// 
//     public abstract boolean can_upload_shot();
// 
//     public abstract String type();
// 
//     public abstract boolean pro();
// 
//     public abstract String buckets_url();
// 
//     public abstract String followers_url();
// 
//     public abstract String following_url();
// 
//     public abstract String likes_url();
// 
//     public abstract String shots_url();
// 
//     @Nullable
//     public abstract String teams_url();
// 
//     public abstract String created_at();
// 
//     public abstract String updated_at();
// 
//     public static TypeAdapter<User> typeAdapter(Gson gson) {
//         return new AutoValue_User.GsonTypeAdapter(gson).nullSafe();
//     }
// }
// 
// Path: app/src/main/java/com/ge/protein/ui/widget/TabCustomView.java
// public class TabCustomView extends LinearLayout {
// 
//     private TextView countText;
//     private TextView contentCategoryText;
// 
//     private long count;
//     private String contentCategory;
// 
//     public TabCustomView(Context context) {
//         super(context);
//         init(context);
//     }
// 
//     public TabCustomView(Context context, AttributeSet attrs) {
//         super(context, attrs);
//         init(context);
//     }
// 
//     public TabCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
//         super(context, attrs, defStyleAttr);
//         init(context);
//     }
// 
//     private void init(Context context) {
//         LayoutInflater.from(context).inflate(R.layout.tab_custom_view_content, this, true);
//         setOrientation(LinearLayout.VERTICAL);
// 
//         countText = (TextView) findViewById(R.id.count);
//         contentCategoryText = (TextView) findViewById(R.id.content_category);
//     }
// 
//     public void setContentCategory(@StringRes int categoryId) {
//         setContentCategory(getContext().getString(categoryId));
//     }
// 
//     public long getCount() {
//         return count;
//     }
// 
//     public void setCount(long count) {
//         this.count = count;
//         countText.setText(String.valueOf(this.count));
//     }
// 
//     public String getContentCategory() {
//         return contentCategory;
//     }
// 
//     public void setContentCategory(String category) {
//         contentCategory = category;
//         contentCategoryText.setText(contentCategory);
//     }
// 
// }
// 
// Path: app/src/main/java/com/ge/protein/util/StringUtils.java
// public class StringUtils {
// 
//     public static CharSequence trimTrailingWhitespace(CharSequence source) {
// 
//         if (source == null) {
//             return "";
//         }
// 
//         int i = source.length();
// 
//         // loop back to the first non-whitespace character
//         while (--i >= 0 && Character.isWhitespace(source.charAt(i))) {
//         }
// 
//         return source.subSequence(0, i + 1);
//     }
// 
// }


import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.ge.protein.R;
import com.ge.protein.data.model.User;
import com.ge.protein.ui.widget.TabCustomView;
import com.ge.protein.util.StringUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
import static com.bumptech.glide.request.RequestOptions.placeholderOf;
        ButterKnife.bind(this);
    }

    @Override
    public void setPresenter(UserContract.Presenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void setupView(User user) {
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
        toolbar.getNavigationIcon().setColorFilter(
                getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_ATOP);
        toolbar.setNavigationOnClickListener(v -> presenter.back());

        userBio.setMovementMethod(LinkMovementMethod.getInstance());

        Drawable[] drawables = location.getCompoundDrawables();
        if (drawables[0] != null) {
            drawables[0].setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
        }

        followButton.setOnClickListener(this);
        location.setOnClickListener(this);
        twitter.setOnClickListener(this);
        web.setOnClickListener(this);

        viewPager.setAdapter(new UserPagerAdapter(((FragmentActivity)getContext()).getSupportFragmentManager(), user));

        TabLayout.Tab shotsTab = tabLayout.newTab();
// Path: app/src/main/java/com/ge/protein/data/model/User.java
// @AutoValue
// public abstract class User implements Parcelable {
// 
//     public abstract long id();
// 
//     public abstract String name();
// 
//     public abstract String username();
// 
//     public abstract String html_url();
// 
//     public abstract String avatar_url();
// 
//     public abstract String bio();
// 
//     @Nullable
//     public abstract String location();
// 
//     public abstract Links links();
// 
//     public abstract long buckets_count();
// 
//     public abstract long comments_received_count();
// 
//     public abstract long followers_count();
// 
//     public abstract long followings_count();
// 
//     public abstract long likes_count();
// 
//     public abstract long likes_received_count();
// 
//     public abstract long projects_count();
// 
//     public abstract long rebounds_received_count();
// 
//     public abstract long shots_count();
// 
//     public abstract long teams_count();
// 
//     public abstract boolean can_upload_shot();
// 
//     public abstract String type();
// 
//     public abstract boolean pro();
// 
//     public abstract String buckets_url();
// 
//     public abstract String followers_url();
// 
//     public abstract String following_url();
// 
//     public abstract String likes_url();
// 
//     public abstract String shots_url();
// 
//     @Nullable
//     public abstract String teams_url();
// 
//     public abstract String created_at();
// 
//     public abstract String updated_at();
// 
//     public static TypeAdapter<User> typeAdapter(Gson gson) {
//         return new AutoValue_User.GsonTypeAdapter(gson).nullSafe();
//     }
// }
// 
// Path: app/src/main/java/com/ge/protein/ui/widget/TabCustomView.java
// public class TabCustomView extends LinearLayout {
// 
//     private TextView countText;
//     private TextView contentCategoryText;
// 
//     private long count;
//     private String contentCategory;
// 
//     public TabCustomView(Context context) {
//         super(context);
//         init(context);
//     }
// 
//     public TabCustomView(Context context, AttributeSet attrs) {
//         super(context, attrs);
//         init(context);
//     }
// 
//     public TabCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
//         super(context, attrs, defStyleAttr);
//         init(context);
//     }
// 
//     private void init(Context context) {
//         LayoutInflater.from(context).inflate(R.layout.tab_custom_view_content, this, true);
//         setOrientation(LinearLayout.VERTICAL);
// 
//         countText = (TextView) findViewById(R.id.count);
//         contentCategoryText = (TextView) findViewById(R.id.content_category);
//     }
// 
//     public void setContentCategory(@StringRes int categoryId) {
//         setContentCategory(getContext().getString(categoryId));
//     }
// 
//     public long getCount() {
//         return count;
//     }
// 
//     public void setCount(long count) {
//         this.count = count;
//         countText.setText(String.valueOf(this.count));
//     }
// 
//     public String getContentCategory() {
//         return contentCategory;
//     }
// 
//     public void setContentCategory(String category) {
//         contentCategory = category;
//         contentCategoryText.setText(contentCategory);
//     }
// 
// }
// 
// Path: app/src/main/java/com/ge/protein/util/StringUtils.java
// public class StringUtils {
// 
//     public static CharSequence trimTrailingWhitespace(CharSequence source) {
// 
//         if (source == null) {
//             return "";
//         }
// 
//         int i = source.length();
// 
//         // loop back to the first non-whitespace character
//         while (--i >= 0 && Character.isWhitespace(source.charAt(i))) {
//         }
// 
//         return source.subSequence(0, i + 1);
//     }
// 
// }


// Path: app/src/main/java/com/ge/protein/user/UserView.java
import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.ge.protein.R;
import com.ge.protein.data.model.User;
import com.ge.protein.ui.widget.TabCustomView;
import com.ge.protein.util.StringUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
import static com.bumptech.glide.request.RequestOptions.placeholderOf;

        ButterKnife.bind(this);
    }

    @Override
    public void setPresenter(UserContract.Presenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void setupView(User user) {
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
        toolbar.getNavigationIcon().setColorFilter(
                getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_ATOP);
        toolbar.setNavigationOnClickListener(v -> presenter.back());

        userBio.setMovementMethod(LinkMovementMethod.getInstance());

        Drawable[] drawables = location.getCompoundDrawables();
        if (drawables[0] != null) {
            drawables[0].setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
        }

        followButton.setOnClickListener(this);
        location.setOnClickListener(this);
        twitter.setOnClickListener(this);
        web.setOnClickListener(this);

        viewPager.setAdapter(new UserPagerAdapter(((FragmentActivity)getContext()).getSupportFragmentManager(), user));

        TabLayout.Tab shotsTab = tabLayout.newTab();
        TabCustomView shotsTabCustomView = new TabCustomView(getContext());