/* * 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; } }