package com.partynetwork.iparty.personal;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.partynetwork.dataprovider.DataProvider.IJsonResultListener;
import com.partynetwork.dataprovider.json.NetworkEntity;
import com.partynetwork.dataprovider.json.struct.Contacts_deleteAttentionRequest;
import com.partynetwork.dataprovider.json.struct.Contacts_setAttentionRequest;
import com.partynetwork.dataprovider.json.struct.Personal_getUserInfoRequest;
import com.partynetwork.dataprovider.json.struct.Personal_getUserInfoResponse;
import com.partynetwork.dataprovider.util.ActionUtil;
import com.partynetwork.dataprovider.util.T;
import com.partynetwork.dataprovider.util.Util;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.app.AppException;
import com.partynetwork.iparty.app.common.BitmapManager;
import com.partynetwork.iparty.app.widget.MessagePop;
import com.partynetwork.iparty.app.widget.MyScrollView;
import com.partynetwork.iparty.app.widget.MessagePop.sendMessageListener;
import com.partynetwork.iparty.app.widget.MyScrollView.OnScrollListener;
import com.partynetwork.iparty.info.UserInfo;
import com.partynetwork.iparty.ishare.IshareReportActivity;
import com.partynetwork.myview.myimageview.CircularImage;
import com.partynetwork.myview.mytoast.MenuBottomPop;
public class PersonalActivity extends FragmentActivity implements
IJsonResultListener, OnScrollListener, OnClickListener, Callback {
public static final String USER_ID = "user_id";
private static final int TAB_INFO = 0;
private static final int TAB_PARTY = 1;
private static final int TAB_SHARE = 2;
private static final int TAB_ABLUM = 3;
// 返回按钮
@ViewInject(R.id.back_iv)
private ImageView back;
// 设置按钮
@ViewInject(R.id.site_iv)
private ImageView site;
@ViewInject(R.id.scroll_view)
private MyScrollView scrollView;
@ViewInject(R.id.frame_layout)
private FrameLayout frameLayout;
/**
* 用户背景
*/
@ViewInject(R.id.personal_bg_iv)
private ImageView personalBg;
@ViewInject(R.id.info_menu)
private LinearLayout infoMenu;
@ViewInject(R.id.info_top_menu)
private LinearLayout infoTopMenu;
/**
* 信息
*/
@ViewInject(R.id.info_rl)
private RelativeLayout infoLayout;
@ViewInject(R.id.info_tv)
private TextView infoTv;
@ViewInject(R.id.info_ll)
private LinearLayout infoLL;
/**
* party列表
*/
@ViewInject(R.id.party_rl)
private RelativeLayout partyLayout;
@ViewInject(R.id.party_tv)
private TextView partyTv;
@ViewInject(R.id.party_ll)
private LinearLayout partyLL;
/**
* share列表
*/
@ViewInject(R.id.share_rl)
private RelativeLayout shareLayout;
@ViewInject(R.id.share_tv)
private TextView shareTv;
@ViewInject(R.id.share_ll)
private LinearLayout shareLL;
/**
* 相册列表
*/
@ViewInject(R.id.ablum_rl)
private RelativeLayout ablumLayout;
@ViewInject(R.id.ablum_tv)
private TextView ablumTv;
@ViewInject(R.id.ablum_ll)
private LinearLayout ablumLL;
/**
* 头像
*/
@ViewInject(R.id.head_iv_other)
private CircularImage headOther;
@ViewInject(R.id.head_iv_me)
private CircularImage headMe;
/**
* 姓名
*/
@ViewInject(R.id.name_tv_other)
private TextView nameOther;
@ViewInject(R.id.name_tv_me)
private TextView nameMe;
/**
* 状态
*/
@ViewInject(R.id.state_tv_other)
private TextView stateOther;
@ViewInject(R.id.state_tv_me)
private TextView stateMe;
/**
* 其他用户显示的布局
*/
@ViewInject(R.id.info_other_rl)
private RelativeLayout otherRL;
@ViewInject(R.id.info_me_ll)
private LinearLayout meLL;
// 用户关系状态
@ViewInject(R.id.relation_iv)
private ImageView ralation;
// 打招呼
private ImageButton sayHi;
// 用于用户基本信息的Fragment
private PersonalInfoFragment personalInfoFragment;
// 用于用户party信息的Fragment
private PartyFragment partyFragment;
// 用于用户i分享信息的Fragment
private ShareFragment shareFragment;
/** 用于对Fragment进行管理 */
private FragmentManager fragmentManager;
/** 用户Id */
private int userId;
/** 登陆用户和当前查询用户的关系:用户类别 -1:未知状态;0:陌生人用户;1:i好友;2:我关注的人;3:我的粉丝;4:我的去你妹用户;5:我自己 */
private int userType;
/** 当前好友的基本信息 */
private UserInfo info;
/**
* 底部的弹窗
*/
private MenuBottomPop menuBottonPop;
private String moreArray[] = new String[] { "举报不良信息" };
private AppContext context;
private BitmapManager bitmapManager;
private MessagePop messageDilog;
private Handler mHandler;
/**
* 覆盖方法
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setTheme(R.style.DefaultLightTheme);
setContentView(R.layout.personal_center);
context = (AppContext) this.getApplication();
ViewUtils.inject(this);
initView();
init();
}
private void initView() {
mHandler = new Handler(this);
sayHi = (ImageButton) findViewById(R.id.say_hi);
sayHi.setOnClickListener(this);
messageDilog = new MessagePop(PersonalActivity.this);
messageDilog.setMessageListener(new sendMessageListener() {
@Override
public void sendMessage(final String message) {
new Thread() {
@Override
public void run() {
Message msg = new Message();
try {
int result = context.setGreet(userId, message);
// 保存信息
// ...
// 待完成
msg.what = 1;// 成功
msg.obj = result;
} catch (AppException e) {
e.printStackTrace();
msg.what = -1;
msg.obj = e;
}
mHandler.sendMessage(msg);
}
}.start();
}
});
}
/**
* 初始化
*/
private void init() {
scrollView.setOnScrollListener(this);
findViewById(R.id.parent_layout).getViewTreeObserver()
.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 这一步很重要,使得上面的购买布局和下面的购买布局重合
onScroll(scrollView.getScrollY());
}
});
bitmapManager = new BitmapManager();
menuBottonPop = new MenuBottomPop(this, moreArray, clickListener);
userId = getIntent().getIntExtra(USER_ID, context.getLoginUid());
if (userId == context.getLoginUid()) {
meLL.setVisibility(View.VISIBLE);
otherRL.setVisibility(View.GONE);
site.setVisibility(View.VISIBLE);
back.setImageResource(R.drawable.personal_back);
sayHi.setVisibility(View.GONE);
} else {
otherRL.setVisibility(View.VISIBLE);
meLL.setVisibility(View.GONE);
site.setVisibility(View.VISIBLE);
back.setImageResource(R.drawable.personal_other_back);
sayHi.setVisibility(View.VISIBLE);
}
// 发起获得指定用户数据请求
Personal_getUserInfoRequest request = new Personal_getUserInfoRequest();
request.setFromUserId(context.getLoginUid());
request.setUserId(userId);
AppContext.getInstance().getmDataProvider()
.getJsonFromNetwork(request, this);
fragmentManager = getSupportFragmentManager();
// 第一次启动时选中第0个tab
setTabSelection(TAB_INFO);
}
/**
* 初始化数据
*/
private void initData() {
if (info == null) {
return;
}
// 设置用户关系
userType = info.getUserType();
switch (userType) {
case ActionUtil.user.RELATIONSHIP_NUKNOW:
// 未知用户
case ActionUtil.user.RELATIONSHIP_STRANGER:
// 关注操作
case ActionUtil.user.RELATIONSHIP_FANS:
// 关注操作
ralation.setImageResource(R.drawable.relation_default);
break;
case ActionUtil.user.RELATIONSHIP_FRIEND:
// 好友
ralation.setImageResource(R.drawable.relation_friend_default);
break;
case ActionUtil.user.RELATIONSHIP_ATTENTION:
// 取消关注操作
ralation.setImageResource(R.drawable.relation_attentioned);
break;
case ActionUtil.user.RELATIONSHIP_BLACKLIST:
ralation.setImageResource(R.drawable.relation_blacklist_default);
// 取消去你妹操作
break;
case ActionUtil.user.RELATIONSHIP_MYSELF:
// 我自己
break;
default:
ralation.setImageResource(R.drawable.relation_default);
break;
}
// 用户个人中心背景
String bgUrl = info.getUserHeadBgUrl();
if (bgUrl != null && !bgUrl.equals("")) {
bitmapManager.loadBitmap(bgUrl, personalBg);
}
// 用户头像
String headUrl = info.getUserHeadUrl();
if (headUrl != null && !headUrl.equals("")) {
if (userId == context.getLoginUid()) {
bitmapManager.loadBitmap(headUrl, headMe);
} else {
bitmapManager.loadBitmap(headUrl, headOther);
}
}
// 姓名,性别
nameOther.setText(info.getUserName());
nameMe.setText(info.getUserName());
messageDilog.setTitle(info.getUserName());
Drawable right = null;
if (info.getUserSex() == ActionUtil.user.MALE) {
right = getResources().getDrawable(R.drawable.sex_boy_big_pressed);
} else if (info.getUserSex() == ActionUtil.user.FEMALE) {
right = getResources().getDrawable(R.drawable.sex_girl_big_pressed);
} else {
right = getResources().getDrawable(
R.drawable.sex_neutral_big_pressed);
}
right.setBounds(0, 0, right.getMinimumWidth(), right.getMinimumHeight());
nameOther.setCompoundDrawables(null, null, right, null);
nameMe.setCompoundDrawables(null, null, right, null);
// 状态
stateOther.setText(info.getUserState() + " " + info.getUserAge() + " "
+ info.getUserCity());
stateMe.setText(info.getUserState() + " " + info.getUserAge() + " "
+ info.getUserCity());
if (personalInfoFragment != null) {
personalInfoFragment.setInfo(info);
}
}
/**
* 事件监听
*/
@OnClick({ R.id.back_iv, R.id.site_iv, R.id.info_rl, R.id.party_rl,
R.id.share_rl, R.id.ablum_rl, R.id.relation_iv })
public void setOnclick(View view) {
switch (view.getId()) {
case R.id.back_iv:
// 返回
finish();
break;
case R.id.site_iv:
// 设置
menuBottonPop.showAtLocation(personalBg);
break;
case R.id.info_rl:
// 当点击了信息tab时,选中第1个tab
setTabSelection(TAB_INFO);
break;
case R.id.party_rl:
setTabSelection(TAB_PARTY);
break;
case R.id.share_rl:
setTabSelection(TAB_SHARE);
break;
case R.id.ablum_rl:
setTabSelection(TAB_ABLUM);
break;
case R.id.relation_iv:
// 用户关系状态
sendOperating();
break;
default:
setTabSelection(TAB_INFO);
break;
}
}
/**
* 底部弹窗的监听
*/
private OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
if (v.getTag().equals(moreArray[0])) {
Intent intent = new Intent(PersonalActivity.this,
IshareReportActivity.class);
intent.putExtra(IshareReportActivity.CONTENT_ID,
info.getUserId());
intent.putExtra(IshareReportActivity.REPORT_EVENT_TYPE, 0);
PersonalActivity.this.startActivity(intent);
}
menuBottonPop.dismiss();
}
};
/**
* 发送用户操作
*/
private void sendOperating() {
userType = info.getUserType();
switch (userType) {
case ActionUtil.user.RELATIONSHIP_NUKNOW:
// 未知用户
break;
case ActionUtil.user.RELATIONSHIP_STRANGER:
// 关注操作
case ActionUtil.user.RELATIONSHIP_FANS:
// 关注操作
Contacts_setAttentionRequest attentionRequest = new Contacts_setAttentionRequest();
attentionRequest.setFromUserId(context.getLoginUid());
attentionRequest.setToUserId(new int[] { userId });
context.getmDataProvider().getJsonFromNetwork(attentionRequest,
this);
break;
case ActionUtil.user.RELATIONSHIP_FRIEND:
// 进行下拉分组操作
case ActionUtil.user.RELATIONSHIP_ATTENTION:
// 取消关注操作
Contacts_deleteAttentionRequest daRequest = new Contacts_deleteAttentionRequest();
daRequest.setFromUserId(context.getLoginUid());
daRequest.setToUserId(new int[] { userId });
context.getmDataProvider().getJsonFromNetwork(daRequest, this);
break;
case ActionUtil.user.RELATIONSHIP_BLACKLIST:
// 取消去你妹操作
break;
case ActionUtil.user.RELATIONSHIP_MYSELF:
// 我自己
break;
default:
break;
}
}
/**
* 根据传入的index参数来设置选中的tab页。
*
* @param index
* 每个tab页对应的下标。0表示信息,1表示party,2表示分享,3表示相册。
*/
private void setTabSelection(int index) {
// 每次选中之前先清楚掉上次的选中状态
clearSelection();
// 开启一个Fragment事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
// 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况
hideFragments(transaction);
switch (index) {
case TAB_INFO:
// 当点击了消息tab时,改变控件的图片和文字颜色
infoTv.setTextColor(Color.BLACK);
infoLL.setVisibility(View.VISIBLE);
if (personalInfoFragment == null) {
// 如果PersonalInfoFragment为空,则创建一个并添加到界面上
personalInfoFragment = new PersonalInfoFragment();
transaction.add(R.id.content, personalInfoFragment);
// personalInfoFragment.sendRequest(userId);
} else {
// 如果PersonalInfoFragment不为空,则直接将它显示出来
transaction.show(personalInfoFragment);
}
break;
case TAB_PARTY:
// 当点击了消息tab时,改变控件的图片和文字颜色
partyTv.setTextColor(Color.BLACK);
partyLL.setVisibility(View.VISIBLE);
if (partyFragment == null) {
partyFragment = new PartyFragment();
partyFragment.setUserId(userId);
transaction.add(R.id.content, partyFragment);
} else {
transaction.show(partyFragment);
}
break;
case TAB_SHARE:
// 当点击了消息tab时,改变控件的图片和文字颜色
shareTv.setTextColor(Color.BLACK);
shareLL.setVisibility(View.VISIBLE);
if (shareFragment == null) {
shareFragment = new ShareFragment();
shareFragment.setUserId(userId);
transaction.add(R.id.content, shareFragment);
} else {
transaction.show(shareFragment);
}
break;
//缺少相册功能 cgy 2014.6.18
case TAB_ABLUM:
// 当点击了消息tab时,改变控件的图片和文字颜色
ablumTv.setTextColor(Color.BLACK);
ablumLL.setVisibility(View.VISIBLE);
break;
default:
// 当点击了消息tab时,改变控件的图片和文字颜色
infoTv.setTextColor(Color.BLACK);
infoLL.setVisibility(View.VISIBLE);
if (personalInfoFragment == null) {
// 如果PersonalInfoFragment为空,则创建一个并添加到界面上
personalInfoFragment = new PersonalInfoFragment();
transaction.add(R.id.content, personalInfoFragment);
} else {
// 如果PersonalInfoFragment不为空,则直接将它显示出来
transaction.show(personalInfoFragment);
}
break;
}
transaction.commit();
}
/**
* 将所有的Fragment都置为隐藏状态。
*
* @param transaction
* 用于对Fragment执行操作的事务
*/
private void hideFragments(FragmentTransaction transaction) {
if (personalInfoFragment != null) {
transaction.hide(personalInfoFragment);
}
if (partyFragment != null) {
transaction.hide(partyFragment);
}
if (shareFragment != null) {
transaction.hide(shareFragment);
}
}
/**
* 清除掉所有的选中状态。
*/
private void clearSelection() {
infoTv.setTextColor(Color.GRAY);
partyTv.setTextColor(Color.GRAY);
shareTv.setTextColor(Color.GRAY);
ablumTv.setTextColor(Color.GRAY);
infoLL.setVisibility(View.GONE);
shareLL.setVisibility(View.GONE);
partyLL.setVisibility(View.GONE);
ablumLL.setVisibility(View.GONE);
}
public void onNetworkRequest() {
// TODO 自动生成的方法存根
}
public void onResultSuccess(NetworkEntity entity) {
if (entity.getRequest().getAction()
.equals(new Personal_getUserInfoRequest().getAction())) {
Personal_getUserInfoResponse infoResponse = (Personal_getUserInfoResponse) entity
.getResponse();
info = infoResponse.getDetails();
initData();
}
if (entity.getRequest().getAction()
.equals(new Contacts_setAttentionRequest().getAction())) {
T.showTips(this, R.drawable.tips_smile, "关注成功!");
userType = info.getUserType();
switch (userType) {
case ActionUtil.user.RELATIONSHIP_NUKNOW:
// 未知用户
case ActionUtil.user.RELATIONSHIP_STRANGER:
// 关注操作
info.setUserType(ActionUtil.user.RELATIONSHIP_ATTENTION);
ralation.setImageResource(R.drawable.relation_attentioned);
break;
case ActionUtil.user.RELATIONSHIP_FANS:
// 关注操作
info.setUserType(ActionUtil.user.RELATIONSHIP_FRIEND);
ralation.setImageResource(R.drawable.relation_friend_default);
break;
default:
ralation.setImageResource(R.drawable.relation_attentioned);
break;
}
}
if (entity.getRequest().getAction()
.equals(new Contacts_deleteAttentionRequest().getAction())) {
T.showTips(this, R.drawable.tips_smile, "取消关注成功!");
userType = info.getUserType();
switch (userType) {
case ActionUtil.user.RELATIONSHIP_FRIEND:
// 好友
info.setUserType(ActionUtil.user.RELATIONSHIP_FANS);
ralation.setImageResource(R.drawable.relation_default);
break;
case ActionUtil.user.RELATIONSHIP_ATTENTION:
// 取消关注操作
info.setUserType(ActionUtil.user.RELATIONSHIP_STRANGER);
ralation.setImageResource(R.drawable.relation_default);
break;
case ActionUtil.user.RELATIONSHIP_BLACKLIST:
info.setUserType(ActionUtil.user.RELATIONSHIP_STRANGER);
ralation.setImageResource(R.drawable.relation_default);
// 取消去你妹操作
break;
default:
info.setUserType(ActionUtil.user.RELATIONSHIP_STRANGER);
ralation.setImageResource(R.drawable.relation_default);
break;
}
}
}
public void onResultFail(String result) {
Util.showMsg(this, result);
}
@Override
public void onScroll(int scrollY) {
// 计算顶部菜单的透明度,实现渐变效果
int btop = infoMenu.getTop();
int height = infoMenu.getHeight();
int dif = scrollY - btop + height;
dif = dif < 0 ? 0 : dif > height ? height : dif;
int alpha = (int) ((height - dif) / (float) height * 255);
back.setAlpha(alpha);
site.setAlpha(alpha);
int mBuyLayout2ParentTop = Math.max(scrollY, infoMenu.getTop());
infoTopMenu.layout(0, mBuyLayout2ParentTop, infoTopMenu.getWidth(),
mBuyLayout2ParentTop + infoTopMenu.getHeight());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.say_hi:
// 打招呼
messageDilog.showAtLocation(sayHi, Gravity.CENTER, 0, 0);
break;
default:
break;
}
}
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case 1:
T.showTips(this, R.drawable.tips_smile, "您的消息已成功发送!");
break;
case -1:
AppException e = (AppException) msg.obj;
if (AppContext.getInstance().isLogin()) {
e.makeToast(this);
}
break;
default:
break;
}
return false;
}
}