package net.coding.program.user;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.ScrollingMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.loopj.android.http.RequestParams;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.UserDetailEditActivity_;
import net.coding.program.common.ClickSmallImage;
import net.coding.program.common.Global;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.common.widget.ListItem1;
import net.coding.program.maopao.MaopaoListFragment;
import net.coding.program.message.MessageListActivity_;
import net.coding.program.model.UserObject;
import net.coding.program.project.detail.file.LocalProjectFileActivity_;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.ViewById;
import org.androidannotations.annotations.res.StringArrayRes;
import org.json.JSONException;
import org.json.JSONObject;
@EActivity(R.layout.activity_user_detail)
public class UserDetailActivity extends BackActivity {
public static final String HOST_FOLLOW = Global.HOST_API + "/user/follow?";
public static final String HOST_UNFOLLOW = Global.HOST_API + "/user/unfollow?";
public final int RESULT_EDIT = 0;
final String HOST_USER_INFO = Global.HOST_API + "/user/key/";
private final int[] items = new int[]{
R.id.pos0,
R.id.pos1,
R.id.pos2
};
@Extra
String globalKey;
@ViewById
ImageView icon;
@ViewById
TextView name;
@ViewById
View sendMessage;
@ViewById
View icon_sharow;
@ViewById
CheckBox followCheckbox;
@ViewById
ImageView userBackground;
@ViewById
ImageView sex;
@StringArrayRes
String[] user_detail_activity_list_first;
@StringArrayRes
String[] user_detail_list_first;
String[] user_detail_list_second;
boolean isMe = false;
int sexs[] = new int[]{
R.drawable.ic_sex_boy,
R.drawable.ic_sex_girl,
android.R.color.transparent
};
boolean mNeedUpdate = false;
private UserObject mUserObject;
View.OnClickListener onClickFans = new View.OnClickListener() {
@Override
public void onClick(View v) {
UsersListActivity.UserParams userParams = new UsersListActivity.UserParams(mUserObject,
UsersListActivity.Friend.Fans);
UsersListActivity_
.intent(UserDetailActivity.this)
.mUserParam(userParams)
.type(UsersListActivity.Friend.Fans)
.start();
}
};
View.OnClickListener onClickFollow = new View.OnClickListener() {
@Override
public void onClick(View v) {
UsersListActivity.UserParams userParams = new UsersListActivity.UserParams(mUserObject,
UsersListActivity.Friend.Follow);
UsersListActivity_
.intent(UserDetailActivity.this)
.mUserParam(userParams)
.type(UsersListActivity.Friend.Follow)
.start();
}
};
@AfterViews
protected final void initUserDetailActivity() {
initListFirst();
if (globalKey != null) {
if (globalKey.equals(MyApp.sUserObject.global_key)) {
isMe = true;
}
bindViewType();
getNetwork(HOST_USER_INFO + globalKey, HOST_USER_INFO);
} else {
try {
String name = getIntent().getData().getQueryParameter("name");
if (name.equals(MyApp.sUserObject.name)) {
isMe = true;
}
bindViewType();
getNetwork(HOST_USER_INFO + name, HOST_USER_INFO);
} catch (Exception e) {
Global.errorLog(e);
finish();
return;
}
}
userBackground.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams lp = userBackground.getLayoutParams();
if (lp.width > 0) {
lp.height = lp.width * 560 / 1080;
userBackground.setLayoutParams(lp);
userBackground.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mUserObject = (UserObject) savedInstanceState.getSerializable("mUserObject");
isMe = savedInstanceState.getBoolean("isMe", false);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mUserObject != null) {
outState.putSerializable("mUserObject", mUserObject);
outState.putBoolean("isMe", isMe);
}
}
// 自己的和他人的显示项目有所不同
private void bindViewType() {
if (isMe) {
getSupportActionBar().setTitle("个人主页");
((ListItem1) findViewById(R.id.clickProject)).setText("我的项目");
((ListItem1) findViewById(R.id.clickMaopao)).setText("我的冒泡");
((ListItem1) findViewById(R.id.clickTopic)).setText("我的话题");
} else {
findViewById(R.id.divideLocal).setVisibility(View.GONE);
findViewById(R.id.clickLocal).setVisibility(View.GONE);
}
followCheckbox.setVisibility(isMe ? View.GONE : View.VISIBLE);
findViewById(R.id.sendMessageLayout).setVisibility(isMe ? View.GONE : View.VISIBLE);
findViewById(R.id.layoutLocal).setVisibility(isMe ? View.GONE : View.VISIBLE);
findViewById(R.id.pointDivide).setVisibility(isMe ? View.VISIBLE : View.GONE);
findViewById(R.id.clickPointRecord).setVisibility(isMe ? View.VISIBLE : View.GONE);
invalidateOptionsMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
if (isMe) {
inflater.inflate(R.menu.user_detail_me, menu);
} else {
inflater.inflate(R.menu.user_detail, menu);
}
return super.onCreateOptionsMenu(menu);
}
@OptionsItem
void action_edit() {
UserDetailEditActivity_
.intent(this)
.startForResult(RESULT_EDIT);
}
@OptionsItem
public final void action_more_detail() {
UserDetailMoreActivity_.intent(this)
.mUserObject(mUserObject)
.start();
}
@OptionsItem
public final void action_copy_link() {
String link = Global.HOST + mUserObject.path;
Global.copy(this, link);
showButtomToast("已复制链接 " + link);
}
@OnActivityResult(RESULT_EDIT)
void onResult() {
getNetwork(HOST_USER_INFO + mUserObject.global_key, HOST_USER_INFO);
}
void displayUserinfo() {
String dayToNow = Global.dayToNow(mUserObject.created_at);
String lastActivity = Global.dayToNow(mUserObject.last_activity_at);
user_detail_list_second = new String[]{
dayToNow,
lastActivity,
mUserObject.global_key,
mUserObject.company,
mUserObject.job_str,
mUserObject.location,
mUserObject.tags_str
};
iconfromNetwork(icon, mUserObject.avatar, new AnimateFirstDisplayListener());
icon.setTag(new MaopaoListFragment.ClickImageParam(mUserObject.avatar));
icon.setOnClickListener(new ClickSmallImage(this));
sex.setImageResource(sexs[mUserObject.sex]);
name.setText(mUserObject.name);
// 自己的页面不显示 关注
if (!isMe) {
int followId = mUserObject.follow ? R.drawable.checkbox_fans_big : R.drawable.checkbox_follow_big;
followCheckbox.setVisibility(View.VISIBLE);
followCheckbox.setButtonDrawable(followId);
followCheckbox.setChecked(mUserObject.followed);
followCheckbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RequestParams params = new RequestParams();
params.put("users", mUserObject.global_key);
if (((CheckBox) v).isChecked()) {
postNetwork(HOST_FOLLOW, params, HOST_FOLLOW);
} else {
postNetwork(HOST_UNFOLLOW, params, HOST_UNFOLLOW);
}
}
});
}
TextView fans = (TextView) findViewById(R.id.fans);
fans.setText(createSpan(String.format("%d 粉丝", mUserObject.fans_count)));
fans.setOnClickListener(onClickFans);
TextView follows = (TextView) findViewById(R.id.follows);
follows.setText(createSpan(String.format("%d 关注", mUserObject.follows_count)));
follows.setOnClickListener(onClickFollow);
setListData();
}
private void initListFirst() {
for (int i = 0; i < items.length; ++i) {
View parent = findViewById(items[i]);
TextView first = (TextView) parent.findViewById(R.id.first);
first.setText(user_detail_activity_list_first[i]);
TextView second = (TextView) parent.findViewById(R.id.second);
second.setEllipsize(null);
second.setMovementMethod(new ScrollingMovementMethod());
}
}
private void setListData() {
String[] secondContents = new String[]{
mUserObject.location,
mUserObject.slogan,
mUserObject.tags_str
};
for (int i = 0; i < items.length; ++i) {
View parent = findViewById(items[i]);
TextView second = (TextView) parent.findViewById(R.id.second);
String contentString = secondContents[i];
if (contentString.isEmpty()) {
contentString = "未填写";
second.setTextColor(getResources().getColor(R.color.font_black_9));
}
second.setText(contentString);
}
}
private SpannableString createSpan(String s) {
SpannableString itemContent = new SpannableString(s);
final ForegroundColorSpan colorSpan = new ForegroundColorSpan(getResources().getColor(R.color.font_green));
itemContent.setSpan(colorSpan, 0, itemContent.length() - 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return itemContent;
}
@Click
void sendMessage() {
if (!dataIsLoaded()) {
return;
}
Intent intent = new Intent(this, MessageListActivity_.class);
intent.putExtra("mUserObject", mUserObject);
startActivity(intent);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(HOST_USER_INFO)) {
if (code == 0) {
mUserObject = new UserObject(respanse.getJSONObject("data"));
displayUserinfo();
} else {
showButtomToast("获取用户信息错误");
onBackPressed();
}
} else if (tag.equals(HOST_FOLLOW)) {
if (code == 0) {
mNeedUpdate = true;
showButtomToast(R.string.follow_success);
mUserObject.followed = true;
} else {
showButtomToast(R.string.follow_fail);
}
displayUserinfo();
} else if (tag.equals(HOST_UNFOLLOW)) {
if (code == 0) {
mNeedUpdate = true;
showButtomToast(R.string.unfollow_success);
mUserObject.followed = false;
} else {
showButtomToast(R.string.unfollow_fail);
}
displayUserinfo();
}
}
@Override
public void onBackPressed() {
if (mNeedUpdate) {
Intent intent = new Intent();
intent.putExtra("data", mUserObject);
setResult(RESULT_OK, intent);
} else {
setResult(RESULT_CANCELED);
}
super.onBackPressed();
}
@Click
public void clickProject() {
if (!dataIsLoaded()) {
return;
}
UserProjectActivity_.intent(this).mUserObject(mUserObject).start();
}
@Click
public void clickLocal() {
LocalProjectFileActivity_.intent(this)
.start();
}
@Click
public void clickMaopao() {
if (!dataIsLoaded()) {
return;
}
Intent intent = new Intent(UserDetailActivity.this, UserMaopaoActivity.class);
intent.putExtra(UserMaopaoActivity.PARAM_ID, mUserObject.id);
startActivity(intent);
}
@Click
public void clickPointRecord() {
if (!dataIsLoaded()) {
return;
}
UserPointActivity_.intent(this).start();
}
@Click
public void clickTopic() {
if (!dataIsLoaded()) {
return;
}
UserTopicActivity_.intent(this).mUserObject(mUserObject).start();
}
private boolean dataIsLoaded() {
return mUserObject != null;
}
private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
((View) imageView.getParent()).setVisibility(View.VISIBLE);
FadeInBitmapDisplayer.animate((View) imageView.getParent(), 300);
}
}
}
}