package net.miz_hi.smileessence.view.fragment.impl;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
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.TextView;
import com.android.volley.toolbox.NetworkImageView;
import net.miz_hi.smileessence.Client;
import net.miz_hi.smileessence.R;
import net.miz_hi.smileessence.cache.ImageCache;
import net.miz_hi.smileessence.command.CommandOpenUrl;
import net.miz_hi.smileessence.menu.UserMenu;
import net.miz_hi.smileessence.model.status.user.UserModel;
import net.miz_hi.smileessence.task.impl.FollowTask;
import net.miz_hi.smileessence.task.impl.GetRelationshipTask;
import net.miz_hi.smileessence.task.impl.GetUserTask;
import net.miz_hi.smileessence.task.impl.UnfollowTask;
import net.miz_hi.smileessence.twitter.TwitterUtil;
import net.miz_hi.smileessence.view.fragment.IRemovable;
import net.miz_hi.smileessence.view.fragment.ISingleton;
import net.miz_hi.smileessence.view.fragment.NamedFragment;
import twitter4j.Relationship;
import twitter4j.User;
@SuppressLint("ValidFragment")
public class UserInfoFragment extends NamedFragment implements OnClickListener, IRemovable, ISingleton
{
UserModel user;
TextView screenNameView;
TextView nameView;
TextView homepageView;
TextView locateView;
TextView isFollowedView;
TextView isProtectedView;
TextView descriptionView;
TextView tweetCountView;
TextView followingView;
TextView followedView;
TextView favoriteView;
NetworkImageView iconView;
NetworkImageView headerView;
Button followButton;
private UserInfoFragment()
{
}
public static UserInfoFragment newInstance(UserModel user)
{
UserInfoFragment fragment = new UserInfoFragment();
fragment.user = user;
return fragment;
}
@Override
public String getTitle()
{
return user.screenName + "'s Profile";
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View page = inflater.inflate(R.layout.userinfo_layout, container, false);
View reload = page.findViewById(R.id.user_reload);
reload.setOnClickListener(this);
View menu = page.findViewById(R.id.user_menu);
menu.setOnClickListener(this);
screenNameView = (TextView) page.findViewById(R.id.user_screenname);
screenNameView.setOnClickListener(this);
nameView = (TextView) page.findViewById(R.id.user_name);
homepageView = (TextView) page.findViewById(R.id.user_homepage);
locateView = (TextView) page.findViewById(R.id.user_locate);
isFollowedView = (TextView) page.findViewById(R.id.user_isfollowed);
isProtectedView = (TextView) page.findViewById(R.id.user_isprotected);
descriptionView = (TextView) page.findViewById(R.id.user_bio);
tweetCountView = (TextView) page.findViewById(R.id.user_count_tweet);
tweetCountView.setOnClickListener(this);
followingView = (TextView) page.findViewById(R.id.user_count_following);
followingView.setOnClickListener(this);
followedView = (TextView) page.findViewById(R.id.user_count_followed);
followedView.setOnClickListener(this);
favoriteView = (TextView) page.findViewById(R.id.user_count_favorite);
favoriteView.setOnClickListener(this);
iconView = (NetworkImageView) page.findViewById(R.id.user_icon);
iconView.setOnClickListener(this);
headerView = (NetworkImageView) page.findViewById(R.id.user_header);
followButton = (Button) page.findViewById(R.id.user_follow);
followButton.setOnClickListener(this);
setData();
return page;
}
public void reload()
{
final ProgressDialog pd = ProgressDialog.show(getActivity(), null, "情報を更新中...", true);
new GetUserTask(user.userId)
{
@Override
public void onPostExecute(User result)
{
user.updateData(result);
setData();
pd.dismiss();
}
}.callAsync();
}
private void setData()
{
nameView.setText(user.name);
screenNameView.setText("@" + user.screenName);
if(TextUtils.isEmpty(user.homePageUrl))
{
homepageView.setVisibility(View.GONE);
}
else
{
homepageView.setText(user.homePageUrl);
}
if(TextUtils.isEmpty(user.location))
{
locateView.setVisibility(View.GONE);
}
else
{
locateView.setText(user.location);
}
if(user.isMe())
{
followButton.setVisibility(View.GONE);
isFollowedView.setText("あなたです");
}
else
{
followButton.setText("読み込み中");
isFollowedView.setText("読み込み中");
new GetRelationshipTask(user.userId)
{
@Override
public void onPostExecute(Relationship result)
{
if(result != null)
{
boolean isFollowing = result.isSourceFollowingTarget();
followButton.setText(isFollowing ? "リムーブする" : "フォローする");
followButton.setBackgroundDrawable(isFollowing ? Client.getMainActivity().getResources().getDrawable(R.drawable.round_red) : Client.getMainActivity().getResources().getDrawable(R.drawable.round_blue));
followButton.setTag(isFollowing);
isFollowedView.setText(result.isSourceFollowedByTarget() ? "フォローされています" : "フォローされていません");
}
}
}.callAsync();
}
isProtectedView.setVisibility(user.isProtected ? View.VISIBLE : View.GONE);
String htmlDescription = getHtmlDescription(user.description);
descriptionView.setText(Html.fromHtml(htmlDescription));
descriptionView.setMovementMethod(LinkMovementMethod.getInstance());
tweetCountView.setText(Integer.toString(user.statusCount));
followingView.setText(Integer.toString(user.friendCount));
followedView.setText(Integer.toString(user.followerCount));
favoriteView.setText(Integer.toString(user.favoriteCount));
ImageCache.setImageToView(user.biggerIconUrl, iconView);
ImageCache.setImageToView(user.headerImageUrl, headerView);
}
private String getHtmlDescription(String description)
{
String html = description;
html = html.replaceAll("https?://[\\w/:%#\\$&\\?\\(\\)~\\.=\\+\\-]+", "<a href=\"$0\">$0</a>");
html = html.replaceAll("@([a-zA-Z0-9_]+)", "<a href=\"" + TwitterUtil.getUserHomeURL("$1") + "\">$0</a>");
html = html.replaceAll("\r\n", "<br />");
return html;
}
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.user_reload:
{
reload();
break;
}
case R.id.user_menu:
{
new UserMenu(getActivity(), user).create().show();
break;
}
case R.id.user_icon:
{
openUrl(user.biggerIconUrl);
break;
}
case R.id.user_screenname:
{
openUrl(TwitterUtil.getUserHomeURL(user.screenName));
break;
}
case R.id.user_count_tweet:
{
openUrl(TwitterUtil.getUserHomeURL(user.screenName));
break;
}
case R.id.user_count_following:
{
openUrl(TwitterUtil.getUserHomeURL(user.screenName) + "/following");
break;
}
case R.id.user_count_followed:
{
openUrl(TwitterUtil.getUserHomeURL(user.screenName) + "/followers");
break;
}
case R.id.user_count_favorite:
{
openUrl(TwitterUtil.getUserHomeURL(user.screenName) + "/favorites");
break;
}
case R.id.user_follow:
{
followButton.setText("読み込み中");
followButton.setBackgroundDrawable(Client.getMainActivity().getResources().getDrawable(R.drawable.round_gray));
Boolean isFollowing = v.getTag() != null ? (Boolean) v.getTag() : false;
if(isFollowing)
{
new UnfollowTask(user.screenName)
{
@Override
public void onPostExecute(User result)
{
super.onPostExecute(result);
setData();
}
}.callAsync();
}
else
{
new FollowTask(user.screenName)
{
@Override
public void onPostExecute(User result)
{
super.onPostExecute(result);
setData();
}
}.callAsync();
}
break;
}
}
}
private void openUrl(String url)
{
new CommandOpenUrl(getActivity(), url).run();
}
@Override
public void onRemoved()
{
}
}