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

Java tutorial

Introduction

Here is the source code for com.tweetlanes.android.core.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.core.view;

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.core.R;
import com.tweetlanes.android.core.util.Util;
import com.tweetlanes.android.core.widget.urlimageviewhelper.UrlImageViewHelper;

import org.socialnetlib.android.SocialNetConstant;
import org.tweetalib.android.TwitterFetchBooleans.FinishedCallback;
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.model.TwitterStatus;
import org.tweetalib.android.model.TwitterUser;
import org.tweetalib.android.model.TwitterUsers;
import org.tweetalib.android.widget.URLSpanNoUnderline;

import java.util.ArrayList;

import twitter4j.URLEntity;

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);

        SocialNetConstant.Type socialNetType = SocialNetConstant.Type.Twitter;

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

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

        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()) {
                                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 = 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()) {
                followingTextView.setText(R.string.follows_you);
            } else {
                followingTextView.setText(null);
            }

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

            if (mUser.getUrl() != null) {
                linkLayout.setVisibility(View.VISIBLE);
                String urlMarkup = TwitterUtil.getTextMarkup(mUser.getUrl(), urlEntities);
                link.setText(Html.fromHtml(urlMarkup + ""));
                link.setMovementMethod(LinkMovementMethod.getInstance());
                URLSpanNoUnderline.stripUnderlines(link);
            } else {
                linkLayout.setVisibility(View.GONE);
            }

            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.getLocation() != null) {
                locationLayout.setVisibility(View.VISIBLE);
                location.setText(mUser.getLocation());
            } else {
                locationLayout.setVisibility(View.GONE);
            }

            configureFriendshipButtonVisibility(mLoggedInUserFollows);

        } 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 final 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 != null && !mLoggedInUserFollows;
                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.core.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.core.view.BaseLaneFragment#UpdateTweetCache()
     */
    @Override
    public void UpdateTweetCache(TwitterStatus status, boolean deleteStatus) {

    }

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

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

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