com.tweetlanes.android.view.ProfileFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.tweetlanes.android.view.ProfileFragment.java

Source

/*
 * Copyright (C) 2013 Chris Lacy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.tweetlanes.android.view;

import java.util.ArrayList;

import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.tweetlanes.android.Constant;
import com.tweetlanes.android.R;

import org.socialnetlib.android.SocialNetConstant;
import org.tweetalib.android.TwitterFetchResult;
import org.tweetalib.android.TwitterFetchUser;
import org.tweetalib.android.TwitterFetchUsers;
import org.tweetalib.android.TwitterManager;
import org.tweetalib.android.TwitterUtil;
import org.tweetalib.android.TwitterFetchBooleans.FinishedCallback;
import org.tweetalib.android.model.TwitterUser;
import org.tweetalib.android.model.TwitterUsers;
import org.tweetalib.android.widget.URLSpanNoUnderline;

import com.tweetlanes.android.util.Util;
import com.tweetlanes.android.widget.urlimageviewhelper.UrlImageViewHelper;

public class ProfileFragment extends BaseLaneFragment {

    /*
     * 
     */
    public static ProfileFragment newInstance(int laneIndex, final Long userId) {

        ProfileFragment fragment = new ProfileFragment();

        fragment.configureBaseLaneFragment(laneIndex, "Profile", new ConfigureBundleListener() {

            @Override
            public void addValues(Bundle args) {
                if (userId != null) {
                    args.putString("userId", userId.toString());
                }
            }

        });

        return fragment;
    }

    /*
     * 
     */
    public static ProfileFragment newInstance(int laneIndex, final String screenName) {

        ProfileFragment fragment = new ProfileFragment();

        fragment.configureBaseLaneFragment(laneIndex, "Profile", new ConfigureBundleListener() {

            @Override
            public void addValues(Bundle args) {
                if (screenName != null) {
                    args.putString("screenName", screenName);
                }
            }

        });

        return fragment;
    }

    private TwitterUser mUser;
    private View mProfileView;
    private Boolean mFollowsLoggedInUser;
    private Boolean mLoggedInUserFollows;
    private FinishedCallback mFriendshipCallback;
    private Button mFriendshipButton;
    private View mFriendshipDivider;

    /*
     * (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        super.onCreateView(inflater, container, savedInstanceState);

        mProfileView = inflater
                .inflate(Constant.SOCIAL_NET_TYPE == SocialNetConstant.Type.Appdotnet ? R.layout.profile_adn
                        : R.layout.profile, null);

        if (getArguments().getString("userId") != null) {
            Long userId = Long.parseLong(getArguments().getString("userId"));
            mUser = TwitterManager.get().getUser(userId);
        }

        if (mFollowsLoggedInUser == null && mUser != null && mFriendshipCallback == null) {

            String currentUserScreenName = getBaseLaneActivity().getApp().getCurrentAccountScreenName();
            if (currentUserScreenName != null) {
                mFriendshipCallback = TwitterManager.get().getFetchBooleansInstance().new FinishedCallback() {

                    @Override
                    public void finished(TwitterFetchResult result, ArrayList<Boolean> returnValues) {

                        if (result.isSuccessful() && returnValues != null && returnValues.size() == 2) {
                            mFollowsLoggedInUser = returnValues.get(0);
                            mLoggedInUserFollows = returnValues.get(1);
                            TextView followingTextView = (TextView) mProfileView.findViewById(R.id.followState);
                            if (mFollowsLoggedInUser != null && mFollowsLoggedInUser.booleanValue() == true) {
                                followingTextView.setText(R.string.follows_you);
                            } else {
                                followingTextView.setText(null);
                            }

                            configureFriendshipButtonVisibility(mLoggedInUserFollows);

                        }

                    }

                };

                TwitterManager.get().getFriendshipExists(mUser.getScreenName(), currentUserScreenName,
                        mFriendshipCallback);
            }
        }

        // Always download the user again
        setInitialDownloadState(InitialDownloadState.WAITING);

        configureView();

        return mProfileView;
    }

    /*
     * 
     */
    void configureView() {

        TextView fullNameTextView = (TextView) mProfileView.findViewById(R.id.fullNameTextView);
        TextView followingTextView = (TextView) mProfileView.findViewById(R.id.followState);
        TextView descriptionTextView = (TextView) mProfileView.findViewById(R.id.bioTextView);
        TextView tweetCount = (TextView) mProfileView.findViewById(R.id.tweetCountLabel);
        TextView followingCount = (TextView) mProfileView.findViewById(R.id.followingCountLabel);
        TextView followersCount = (TextView) mProfileView.findViewById(R.id.followersCountLabel);
        TextView favoritesCount = (TextView) mProfileView.findViewById(R.id.favorites_count);
        LinearLayout linkLayout = (LinearLayout) mProfileView.findViewById(R.id.linkLayout);
        TextView link = (TextView) mProfileView.findViewById(R.id.link);
        LinearLayout locationLayout = (LinearLayout) mProfileView.findViewById(R.id.locationLayout);
        TextView location = (TextView) mProfileView.findViewById(R.id.location);
        LinearLayout detailsLayout = (LinearLayout) mProfileView.findViewById(R.id.detailsLayout);
        ImageView privateAccountImage = (ImageView) mProfileView.findViewById(R.id.private_account_image);
        mFriendshipButton = (Button) mProfileView.findViewById(R.id.friendship_button);
        mFriendshipDivider = (View) mProfileView.findViewById(R.id.friendship_divider);

        if (mUser != null) {
            ImageView avatar = (ImageView) mProfileView.findViewById(R.id.profileImage);
            //String imageUrl = TwitterManager.getProfileImageUrl(mUser.getScreenName(), TwitterManager.ProfileImageSize.ORIGINAL);
            String imageUrl = mUser.getProfileImageUrl(TwitterManager.ProfileImageSize.ORIGINAL);
            UrlImageViewHelper.setUrlDrawable(avatar, imageUrl, R.drawable.ic_contact_picture);
            //avatar.setImageURL(imageUrl);

            ImageView coverImage = (ImageView) mProfileView.findViewById(R.id.coverImage);
            if (coverImage != null) {
                String url = mUser.getCoverImageUrl();
                if (url != null) {
                    UrlImageViewHelper.setUrlDrawable(coverImage, url, R.drawable.ic_contact_picture);
                }
            }

            fullNameTextView.setText(mUser.getName());
            if (mFollowsLoggedInUser != null && mFollowsLoggedInUser.booleanValue() == true) {
                followingTextView.setText(R.string.follows_you);
            } else {
                followingTextView.setText(null);
            }

            String description = mUser.getDescription();
            if (description != null) {
                String descriptionMarkup = TwitterUtil.getTextMarkup(description);
                descriptionTextView.setText(Html.fromHtml(descriptionMarkup + " "));
                descriptionTextView.setMovementMethod(LinkMovementMethod.getInstance());
                URLSpanNoUnderline.stripUnderlines(descriptionTextView);
            }

            detailsLayout.setVisibility(View.VISIBLE);
            privateAccountImage.setVisibility(mUser.getProtected() ? View.VISIBLE : View.GONE);

            tweetCount.setText(Util.getPrettyCount(mUser.getStatusesCount()));
            followingCount.setText(Util.getPrettyCount(mUser.getFriendsCount()));
            followersCount.setText(Util.getPrettyCount(mUser.getFollowersCount()));
            if (favoritesCount != null) {
                favoritesCount.setText(Util.getPrettyCount(mUser.getFavoritesCount()));
            }

            if (mUser.getUrl() != null) {
                linkLayout.setVisibility(View.VISIBLE);
                //link.setText(mUser.getUrl());
                //URLSpanNoUnderline.stripUnderlines(link);
                link.setText(Html.fromHtml("<a href=\"" + mUser.getUrl() + "\">" + mUser.getUrl() + "</a>"));
                link.setMovementMethod(LinkMovementMethod.getInstance());
                URLSpanNoUnderline.stripUnderlines(link);
            } else {
                linkLayout.setVisibility(View.GONE);
            }

            if (mUser.getLocation() != null) {
                locationLayout.setVisibility(View.VISIBLE);
                location.setText(mUser.getLocation());
            } else {
                locationLayout.setVisibility(View.GONE);
            }

            configureFriendshipButtonVisibility(mLoggedInUserFollows);

            getBaseLaneActivity().setComposeTweetDefault();
        } else {
            fullNameTextView.setText(null);
            followingTextView.setText(null);
            descriptionTextView.setText(null);

            detailsLayout.setVisibility(View.GONE);
            linkLayout.setVisibility(View.GONE);
            locationLayout.setVisibility(View.GONE);
            mFriendshipButton.setVisibility(View.GONE);
            mFriendshipDivider.setVisibility(View.GONE);
            privateAccountImage.setVisibility(View.GONE);
        }
    }

    /*
     * 
     */
    private void configureFriendshipButtonVisibility(Boolean loggedInUserFollows) {

        if (loggedInUserFollows == null) {
            mFriendshipButton.setVisibility(View.GONE);
            mFriendshipDivider.setVisibility(View.GONE);
        } else {
            mFriendshipButton.setVisibility(View.VISIBLE);
            mFriendshipDivider.setVisibility(View.VISIBLE);
            mFriendshipButton.setText(loggedInUserFollows ? R.string.action_unfollow : R.string.action_follow);
            mFriendshipButton.setOnClickListener(mFrienshipButtonListener);
        }
    }

    /*
     * 
     */
    private OnClickListener mFrienshipButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (mUser != null && mLoggedInUserFollows != null && mUpdateFriendshipFinishedCallback == null) {
                String loggedInUserScreenName = getBaseLaneActivity().getApp().getCurrentAccountScreenName();

                final boolean willCreateFriendship = mLoggedInUserFollows == false ? true : false;
                configureFriendshipButtonVisibility(willCreateFriendship);

                mUpdateFriendshipFinishedCallback = TwitterManager.get()
                        .getFetchUsersInstance().new FinishedCallback() {

                            @Override
                            public void finished(TwitterFetchResult result, TwitterUsers users) {
                                if (result.isSuccessful()) {
                                    mLoggedInUserFollows = willCreateFriendship;
                                }

                                mUpdateFriendshipFinishedCallback = null;
                            }

                        };

                TwitterManager.get().updateFriendship(loggedInUserScreenName, mUser, willCreateFriendship,
                        mUpdateFriendshipFinishedCallback);
            }
        }

    };

    private TwitterFetchUsers.FinishedCallback mUpdateFriendshipFinishedCallback;

    /*
     * (non-Javadoc)
     * @see com.tweetlanes.android.view.BaseLaneFragment#triggerInitialDownload()
     */
    @Override
    public void triggerInitialDownload() {

        TwitterFetchUser.FinishedCallback callback = TwitterManager.get()
                .getFetchUserInstance().new FinishedCallback() {

                    public void finished(TwitterFetchResult result, TwitterUser user) {
                        setInitialDownloadState(InitialDownloadState.DOWNLOADED);
                        if (user != null) {
                            mUser = user;
                        }
                        configureView();
                    }

                };

        Long userId = null;
        if (getArguments().getString("userId") != null) {
            userId = Long.parseLong(getArguments().getString("userId"));
        }

        if (userId != null) {
            TwitterManager.get().getUser(userId, callback);
            setInitialDownloadState(InitialDownloadState.DOWNLOADING);
        } else {
            String screenName = getArguments().getString(("screenName"));
            if (screenName != null) {
                TwitterManager.get().getUser(screenName, callback);
                setInitialDownloadState(InitialDownloadState.DOWNLOADING);
            } else {
                setInitialDownloadState(InitialDownloadState.DOWNLOADED);
            }
        }
    }

    /*
     * (non-Javadoc)
     * @see com.tweetlanes.android.view.BaseLaneFragment#onJumpToTop()
     */
    @Override
    public void onJumpToTop() {
    }

    /*
     * (non-Javadoc)
     * @see com.tweetlanes.android.view.BaseLaneFragment#clearLocalCache()
     */
    @Override
    public void clearLocalCache() {
        mUser = null;
    }

    /*
     * (non-Javadoc)
     * @see com.tweetlanes.android.view.BaseLaneFragment#getContentToCache()
     */
    @Override
    public String getDataToCache() {
        return null;
    }
}