package com.kaixin.android.menu;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.kaixin.android.KXApplication;
import com.kaixin.android.R;
import com.kaixin.android.activity.CheckInActivity;
import com.kaixin.android.activity.PhoneAlbumActivity;
import com.kaixin.android.activity.SetUpActivity;
import com.kaixin.android.activity.VoiceActivity;
import com.kaixin.android.activity.WriteRecordActivity;
import com.kaixin.android.anim.UgcAnimations;
import com.kaixin.android.common.Constants;
import com.kaixin.android.common.KaiXinAddress;
import com.kaixin.android.result.FriendInfoResult;
import com.kaixin.android.utils.ActivityForResultUtil;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.CommonUtils;
import com.kaixin.android.utils.HttpException;
import com.kaixin.android.utils.ImageUtil;
import com.kaixin.android.utils.StorageUtil;
import com.kaixin.android.utils.StringUtil;
import com.kaixin.android.utils.TextUtil;
import com.kaixin.android.utils.ViewUtil;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
* 菜单界面
*
* @author gyz
*
*/
public class Desktop {
private Context mContext;
private Activity mActivity;
private KXApplication mKXApplication;
/**
* 当前界面的View
*/
private View mDesktop;
/**
* 以下为控件,自己查看布局文件
*/
private LinearLayout mWallpager;
private RelativeLayout mTopLayout;
private ImageView mAvatar;
private TextView mName;
private TextView mSig;
private ListView mDisplay;
private View mUgcView;
private RelativeLayout mUgcLayout;
private ImageView mUgc;
private ImageView mUgcBg;
private ImageView mUgcVoice;
private ImageView mUgcPhoto;
private ImageView mUgcRecord;
private ImageView mUgcLbs;
private ImageView mSetUp;
/**
* 桌面适配器
*/
private DesktopAdapter mAdapter;
/**
* 判断当前的path菜单是否已经显示
*/
private boolean mUgcIsShowing = false;
/**
* 接口对象,用来修改显示的View
*/
private onChangeViewListener mOnChangeViewListener;
public Desktop(Context context, Activity activity, KXApplication application) {
mContext = context;
mActivity = activity;
mKXApplication = application;
// 绑定布局到当前View
mDesktop = LayoutInflater.from(context).inflate(R.layout.desktop, null);
findViewById();
setListener();
init();
}
/**
* 绑定界面UI
*/
private void findViewById() {
mWallpager = (LinearLayout) mDesktop
.findViewById(R.id.desktop_wallpager);
mTopLayout = (RelativeLayout) mDesktop
.findViewById(R.id.desktop_top_layout);
mAvatar = (ImageView) mDesktop.findViewById(R.id.desktop_avatar);
mName = (TextView) mDesktop.findViewById(R.id.desktop_name);
mSig = (TextView) mDesktop.findViewById(R.id.desktop_sig);
mDisplay = (ListView) mDesktop.findViewById(R.id.desktop_display);
mUgcView = (View) mDesktop.findViewById(R.id.desktop_ugc);
mUgcLayout = (RelativeLayout) mUgcView.findViewById(R.id.ugc_layout);
mUgc = (ImageView) mUgcView.findViewById(R.id.ugc);
mUgcBg = (ImageView) mUgcView.findViewById(R.id.ugc_bg);
mUgcVoice = (ImageView) mUgcView.findViewById(R.id.ugc_voice);
mUgcPhoto = (ImageView) mUgcView.findViewById(R.id.ugc_photo);
mUgcRecord = (ImageView) mUgcView.findViewById(R.id.ugc_record);
mUgcLbs = (ImageView) mUgcView.findViewById(R.id.ugc_lbs);
mSetUp = (ImageView) mDesktop.findViewById(R.id.desktop_set_up);
}
/**
* UI事件监听
*/
private void setListener() {
// 头布局监听
mTopLayout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 切换界面View为用户首页
if (mOnChangeViewListener != null) {
mOnChangeViewListener.onChangeView(ViewUtil.USER);
mAdapter.setChoose(-1);
mAdapter.notifyDataSetChanged();
}
}
});
// Path监听
mUgcView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// 判断是否已经显示,显示则关闭并隐藏
if (mUgcIsShowing) {
mUgcIsShowing = false;
UgcAnimations.startCloseAnimation(mUgcLayout, mUgcBg, mUgc,
500);
return true;
}
return false;
}
});
// Path监听
mUgc.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 判断是否显示,已经显示则隐藏,否则则显示
mUgcIsShowing = !mUgcIsShowing;
if (mUgcIsShowing) {
UgcAnimations.startOpenAnimation(mUgcLayout, mUgcBg, mUgc,
500);
} else {
UgcAnimations.startCloseAnimation(mUgcLayout, mUgcBg, mUgc,
500);
}
}
});
// Path 语音按钮监听
mUgcVoice.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Animation anim = UgcAnimations.clickAnimation(500);
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
mContext.startActivity(new Intent(mContext,
VoiceActivity.class));
closeUgc();
}
});
mUgcVoice.startAnimation(anim);
}
});
// Path 拍照按钮监听
mUgcPhoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Animation anim = UgcAnimations.clickAnimation(500);
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
PhotoDialog();
closeUgc();
}
});
mUgcPhoto.startAnimation(anim);
}
});
// Path 记录按钮监听
mUgcRecord.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Animation anim = UgcAnimations.clickAnimation(500);
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
mContext.startActivity(new Intent(mContext,
WriteRecordActivity.class));
closeUgc();
}
});
mUgcRecord.startAnimation(anim);
}
});
// Path 签到按钮监听
mUgcLbs.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Animation anim = UgcAnimations.clickAnimation(500);
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
mContext.startActivity(new Intent(mContext,
CheckInActivity.class));
closeUgc();
}
});
mUgcLbs.startAnimation(anim);
}
});
// 选项按钮监听
mSetUp.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mContext.startActivity(new Intent(mContext, SetUpActivity.class));
}
});
}
/**
* 界面初始化
*/
private void init() {
/**
* 设置墙纸、姓名、签名、头像以及菜单界面
*/
getUserInfo();
mAdapter = new DesktopAdapter(mContext);
mDisplay.setAdapter(mAdapter);
}
/**
* 获取用户资料
*/
private void getUserInfo() {
if(!CommonUtils.isNetWorkConnected(mContext)){
mKXApplication.mMyInfoResult = StorageUtil.getFriendInfoResult(mContext);
}else{
mKXApplication.mMyInfoResult = new FriendInfoResult();
String json = CallService.getUserInfo("");
try {
JSONObject jsonObject = new JSONObject(json);
JSONObject object = jsonObject.getJSONObject("data");
mKXApplication.mMyInfoResult.setName(object.getString("name"));
mKXApplication.mMyInfoResult.setAvatar(object.getString("avatar"));
mKXApplication.mMyInfoResult.setGender(object.getInt("gender"));
mKXApplication.mMyInfoResult.setConstellation(object
.getString("constellation"));
mKXApplication.mMyInfoResult.setSignature(object
.getString("signature"));
mKXApplication.mMyInfoResult.setPhoto_count(object
.getInt("photo_count"));
mKXApplication.mMyInfoResult.setDiary_count(object
.getInt("diary_count"));
mKXApplication.mMyInfoResult.setFriend_count(object
.getInt("friend_count"));
mKXApplication.mMyInfoResult.setVisitor_count(object
.getInt("visitor_count"));
mKXApplication.mMyInfoResult.setWallpager(object
.getInt("wallpager"));
mKXApplication.mMyInfoResult.setDate(object.getString("date"));
StorageUtil.setFriendInfoResult(mContext, mKXApplication.mMyInfoResult);
} catch (JSONException e) {
e.printStackTrace();
}
}
// 界面的数据赋值
mName.setText(mKXApplication.mMyInfoResult.getName());
// mAvatar.setImageBitmap(PhotoUtil.toRoundCorner(mKXApplication
// .getAvatar(mKXApplication.mMyInfoResult.getAvatar()), 15));
ImageLoader.getInstance().displayImage(Constants.getImageUrl()+ mKXApplication.mMyInfoResult.getAvatar(), mAvatar, ImageUtil.getOption());
StorageUtil.saveString(mContext, "mAvatar", mKXApplication.mMyInfoResult.getAvatar());
String signature =mKXApplication.mMyInfoResult.getSignature();
if(!StringUtil.isNull(signature)){
mSig.setText(new TextUtil(mKXApplication)
.replace(mKXApplication.mMyInfoResult.getSignature()));
}else{
mSig.setText("本人很低调,还没签名!");
}
mWallpager.setBackgroundDrawable(new BitmapDrawable(mKXApplication
.getTitleWallpager(mKXApplication.mWallpagerPosition)));
/**
* 原有的墙纸取消,采用随机的墙纸,这样保证每次进入都不一样,其他用户采用自己设定的墙纸显示,如注释掉的代码
*
* mHead_Wallpager.setImageDrawable(mKXApplication
* .getTitleWallpager(mKXApplication.mMyInfoResult
* .getWallpager()));
*/
}
/**
* 更改墙纸
*/
public void setWallpager() {
mWallpager.setBackgroundDrawable(new BitmapDrawable(mKXApplication
.getWallpager(mKXApplication.mWallpagerPosition)));
}
/**
* 更改签名
*
* @param arg0
* 修改的签名文本
*/
public void setSignature(String arg0) {
mSig.setText(new TextUtil(mKXApplication).replace(arg0));
}
/**
* 修改昵称
*
* @param arg0
* 修改的昵称文本
*/
public void setNickName(String arg0) {
mName.setText(new TextUtil(mKXApplication).replace(arg0));
}
/**
* 修改头像
*
* @param bitmap
* 修改的头像
*/
public void setAvatar(Bitmap bitmap) {
mAvatar.setImageBitmap(bitmap);
}
/**
* 界面修改方法
*
* @param onChangeViewListener
*/
public void setOnChangeViewListener(
onChangeViewListener onChangeViewListener) {
mOnChangeViewListener = onChangeViewListener;
}
/**
* 获取Path菜单显示状态
*
* @return 显示状态
*/
public boolean getUgcIsShowing() {
return mUgcIsShowing;
}
/**
* 关闭Path菜单
*/
public void closeUgc() {
mUgcIsShowing = false;
UgcAnimations.startCloseAnimation(mUgcLayout, mUgcBg, mUgc, 500);
}
/**
* 获取菜单界面
*
* @return 菜单界面的View
*/
public View getView() {
return mDesktop;
}
/**
* 切换显示界面的接口
*
* @author gyz
*
*/
public interface onChangeViewListener {
public abstract void onChangeView(int arg0);
}
/**
* 菜单适配器
*
* @author gyz
*
*/
public class DesktopAdapter extends BaseAdapter {
private Context mContext;
private String[] mName = { "首页", "消息", "好友" , "听听好友" , "照片", "礼物", //"转帖", "礼物", "游戏",
"附近"};
private int[] mIcon = { R.drawable.sidebar_icon_dynamic,
R.drawable.sidebar_icon_news, R.drawable.sidebar_icon_friends, R.drawable.sidebar_icon_friends,
R.drawable.sidebar_icon_photo,
R.drawable.sidebar_icon_gifts,/*R.drawable.sidebar_icon_viewed,
R.drawable.sidebar_icon_recommend,*/ R.drawable.sidebar_icon_lbs };
private int[] mIconPressed = { R.drawable.sidebar_icon_dynamic_pressed,
R.drawable.sidebar_icon_news_pressed,
R.drawable.sidebar_icon_friends_pressed,
R.drawable.sidebar_icon_friends_pressed,
R.drawable.sidebar_icon_photo_pressed,
// R.drawable.sidebar_icon_viewed_pressed,
R.drawable.sidebar_icon_gifts_pressed,
// R.drawable.sidebar_icon_recommend_pressed,
R.drawable.sidebar_icon_lbs_pressed };
private int mChoose = 0;
public DesktopAdapter(Context context) {
mContext = context;
}
public int getCount() {
return ViewUtil.COUNT;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public void setChoose(int choose) {
mChoose = choose;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.desktop_item, null);
holder = new ViewHolder();
holder.layout = (LinearLayout) convertView
.findViewById(R.id.desktop_item_layout);
holder.icon = (ImageView) convertView
.findViewById(R.id.desktop_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.desktop_item_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(mName[position]);
if (position == mChoose) {
holder.name.setTextColor(Color.parseColor("#ffffffff"));
holder.icon.setImageResource(mIconPressed[position]);
holder.layout.setBackgroundColor(Color.parseColor("#20000000"));
} else {
holder.name.setTextColor(Color.parseColor("#7fffffff"));
holder.icon.setImageResource(mIcon[position]);
holder.layout.setBackgroundResource(Color
.parseColor("#00000000"));
}
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mOnChangeViewListener != null) {
switch (position) {
case ViewUtil.HOME:
mOnChangeViewListener.onChangeView(ViewUtil.HOME);
break;
case ViewUtil.MESSAGE:
mOnChangeViewListener
.onChangeView(ViewUtil.MESSAGE);
break;
case ViewUtil.FRIENDS:
mOnChangeViewListener
.onChangeView(ViewUtil.FRIENDS);
break;
case ViewUtil.BUY_SELL:
mOnChangeViewListener
.onChangeView(ViewUtil.BUY_SELL);
break;
case ViewUtil.PHOTO:
mOnChangeViewListener.onChangeView(ViewUtil.PHOTO);
break;
case ViewUtil.LBS:
mOnChangeViewListener.onChangeView(ViewUtil.LBS);
break;
case ViewUtil.VIEWED:
mOnChangeViewListener.onChangeView(ViewUtil.VIEWED);
break;
case ViewUtil.GIFTS:
mOnChangeViewListener.onChangeView(ViewUtil.GIFTS);
break;
case ViewUtil.RECOMMEND:
mOnChangeViewListener
.onChangeView(ViewUtil.RECOMMEND);
break;
default:
mOnChangeViewListener.onChangeView(ViewUtil.HOME);
break;
}
mChoose = position;
notifyDataSetChanged();
}
}
});
return convertView;
}
class ViewHolder {
LinearLayout layout;
ImageView icon;
TextView name;
}
}
private void PhotoDialog() {
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle("上传照片");
builder.setItems(new String[] { "拍照上传", "上传手机中的照片" },
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
switch (which) {
case 0:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File dir = new File(KaiXinAddress.SDCARED_CAMERA);
if (!dir.exists()) {
dir.mkdirs();
}
mKXApplication.mUploadPhotoPath = KaiXinAddress.SDCARED_CAMERA
+ UUID.randomUUID().toString();
File file = new File(
mKXApplication.mUploadPhotoPath);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
}
}
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(file));
mActivity
.startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_CAMERA);
break;
case 1:
mContext.startActivity(new Intent(mContext,
PhoneAlbumActivity.class));
break;
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.create().show();
}
}