package com.partynetwork.iparty.login;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.openfire.manager.XmppConnection;
import com.partynetwork.dataprovider.DataProvider.IJsonResultListener;
import com.partynetwork.dataprovider.json.NetworkEntity;
import com.partynetwork.dataprovider.json.struct.FileRequest;
import com.partynetwork.dataprovider.json.struct.FileResponse;
import com.partynetwork.dataprovider.json.struct.Login_registerRequest;
import com.partynetwork.dataprovider.json.struct.Login_registerResponse;
import com.partynetwork.dataprovider.util.StringUtil;
import com.partynetwork.dataprovider.util.T;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.app.common.BitmapManager;
import com.partynetwork.iparty.app.common.UIHelper;
import com.partynetwork.iparty.info.RegisterUserInfo;
import com.partynetwork.myview.myimageview.CircularImage;
import com.partynetwork.myview.myimageview.ImagePicker;
import com.partynetwork.myview.mytoast.LoadingDialog;
import com.partynetwork.myview.wheelview.NumericWheelAdapter;
import com.partynetwork.myview.wheelview.WheelAdapter;
import com.partynetwork.myview.wheelview.WheelPicker;
import com.partynetwork.myview.wheelview.WheelView;
import com.partynetwork.myview.wheelview.WheelPicker.WheelListener;
import com.baidu.mobstat.StatService;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
/**
* 注册界面
*
* @author sys
* @version 1.1
* @since 2014.01.18
*/
public class Register4 extends FragmentActivity implements OnClickListener, IJsonResultListener {
/* 控件声明注册 */
// 返回按钮
@ViewInject(R.id.head_left_tv)
private TextView backButton;
// 头像选择
@ViewInject(R.id.register_head)
private RelativeLayout chooseHead;
// 照相机图标
@ViewInject(R.id.register_camera)
private TextView chooseCamera;
@ViewInject(R.id.head_civ)
private CircularImage head_iv;
// 用户名
@ViewInject(R.id.register_name_tv)
private EditText userName;
// 年龄
@ViewInject(R.id.register_age_tv)
private TextView age_tv;
// 性别:女
@ViewInject(R.id.register_women_tv)
TextView women;
// 性别:男
@ViewInject(R.id.register_man_tv)
TextView man;
// 性别:中性
@ViewInject(R.id.register_girlandboy_tv)
TextView girlandboy;
// 用户状态文本框
@ViewInject(R.id.register_partystate_edit)
EditText partyState;
// 选择城市
@ViewInject(R.id.register_city_tv)
TextView city_tv;
// 可供选择的状态列表
private List<TextView> state_list = new ArrayList<TextView>();
// 可供选择的性别列表
private List<TextView> sex_list = new ArrayList<TextView>();
// 创建账户
@ViewInject(R.id.head_right_tv)
TextView mRegisterButton;
private RegisterUserInfo user;
private int sex;
private String name;
private int age;
private String state;
private int city;
/**
* 文件存放路径
*/
private String file;
/**
* 照片选择对象
*/
private ImagePicker imagePicker;
private boolean hasHead;
// 登陆进度提示框
private LoadingDialog dialog;
/** 滚轮弹窗 */
private WheelPicker wheelPicker;
private BitmapManager bitmapManager;
private String registerOpenfire;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.DefaultLightTheme);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.register_four);
ViewUtils.inject(this);
bitmapManager = new BitmapManager();
init();
}
private int[] id = new int[] { R.id.tv_1, R.id.tv_2, R.id.tv_3, R.id.tv_4, R.id.tv_5,
R.id.tv_6, R.id.tv_7, R.id.tv_8, R.id.tv_9, R.id.tv_10 };
private void init() {
// 状态列表
for (int i = 0; i < 10; i++) {
TextView tv = (TextView) findViewById(id[i]);
tv.setOnClickListener(this);
state_list.add(tv);
}
// 性别列表
sex_list.add(man);
sex_list.add(women);
sex_list.add(girlandboy);
user = getIntent().getParcelableExtra("user");
imagePicker = new ImagePicker(this, true);
setSexBg(R.id.register_man_tv);
dialog = new LoadingDialog(this, "注册中……");
wheelPicker = new WheelPicker(this, 1, new NumericWheelAdapter(18, 100), ageWheelListener);
}
@OnClick({ R.id.head_left_tv, R.id.head_civ, R.id.register_camera, R.id.register_women_tv,
R.id.register_man_tv, R.id.register_girlandboy_tv, R.id.register_city_tv,
R.id.head_right_tv, R.id.register_age_tv })
public void btnClick(View v) {
switch (v.getId()) {
case R.id.head_left_tv:
// 返回按钮
finish();
// 界面消失动画
overridePendingTransition(R.anim.animation_enterfromleft,
R.anim.animation_fadefromright);
break;
case R.id.head_civ:
case R.id.register_camera:
// 头像选择
imagePicker.show(chooseHead);
break;
case R.id.register_women_tv:
// 选择性别女
setSexBg(R.id.register_women_tv);
break;
case R.id.register_man_tv:
// 选择性别男
setSexBg(R.id.register_man_tv);
break;
case R.id.register_girlandboy_tv:
// 选择性别中性
setSexBg(R.id.register_girlandboy_tv);
break;
case R.id.register_city_tv:
// 城市选择界面
Intent intent = new Intent(Register4.this, ProvinceActivity.class);
startActivityForResult(intent, 0);
// 设置界面出现动画
overridePendingTransition(R.anim.animation_enterfromright,
R.anim.animation_fadefromleft);
break;
case R.id.head_right_tv:
if (checkIn()) {
dialog.show();
user.setUserAge(age);
user.setUserName(name);
user.setUserState(state);
user.setUserSex(sex);
if (hasHead) {
sendFileRequest();
} else {
sendRegisterRequest("");
}
}
// 打印出注册信息
if (true) {
}
break;
case R.id.register_age_tv:
// 年龄
wheelPicker.showAt(backButton);
break;
default:
break;
}
}
/**
* 验证输入数据的正确性
*/
private boolean checkIn() {
// 用户名验证
name = userName.getText().toString();
if (!hasHead) {
T.showTips(Register4.this, R.drawable.tips_error, "请选择用户头像!");
return false;
}
if (name.length() == 0) {
T.showTips(Register4.this, R.drawable.tips_error, "太懒了吧,名字都不输。");
return false;
}
if (name.length() > 16) {
T.showTips(Register4.this, R.drawable.tips_error, "用户名好长,能短点吗?");
return false;
}
try {
age = Integer.parseInt(age_tv.getText().toString());
if (age < 18 || age > 100) {
T.showTips(Register4.this, R.drawable.tips_error, "你的年龄不符合规定啊。");
return false;
}
} catch (NumberFormatException e) {
T.showTips(Register4.this, R.drawable.tips_error, "你确定输了正确的年龄?");
return false;
}
state = partyState.getText().toString();
int l = state.length();
if (l != 3) {
T.showTips(Register4.this, R.drawable.tips_error, "状态只能是3个字哦~");
return false;
}
if (city == 0) {
T.showTips(Register4.this, R.drawable.tips_error, "你来自外星?");
return false;
}
return true;
}
private int[] sex_normal = new int[] { R.drawable.sex_boy_middle_normal,
R.drawable.sex_girl_middle_normal, R.drawable.sex_neutral_middle_normal };
private int[] sex_selected = new int[] { R.drawable.sex_boy_middle_pressed,
R.drawable.sex_girl_middle_pressed, R.drawable.sex_neutral_middle_pressed };
private String[] text_color = new String[] { "#009DE6", "#EB66A3", "#9968C4" };
/**
* 设置性别的选中效果
*
* @param id
*/
private void setSexBg(int id) {
for (int i = 0; i < sex_list.size(); i++) {
TextView ll = sex_list.get(i);
if (ll.getId() == id) {
ll.setBackgroundResource(R.drawable.stroke_btn);
Drawable drawable = getResources().getDrawable(sex_selected[i]);
// / 这一步必须要做,否则不会显示.
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
ll.setCompoundDrawables(drawable, null, null, null);
ll.setTextColor(Color.parseColor(text_color[i]));
sex = i;
} else {
ll.setBackgroundResource(0);
Drawable drawable = getResources().getDrawable(sex_normal[i]);
// / 这一步必须要做,否则不会显示.
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
ll.setCompoundDrawables(drawable, null, null, null);
ll.setTextColor(Color.parseColor("#8F8F8F"));
}
}
}
/**
* 设置状态的选中效果
*
* @param id
*/
private void setStateBg(int id) {
for (int i = 0; i < state_list.size(); i++) {
TextView tv = state_list.get(i);
if (tv.getId() == id) {
tv.setBackgroundResource(R.drawable.stroke_btn);
tv.setTextColor(Color.DKGRAY);
partyState.setText(tv.getText().toString());
} else {
tv.setBackgroundResource(0);
tv.setTextColor(Color.GRAY);
}
}
}
/**
* 响应状态的选中效果
*/
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_1:
setStateBg(R.id.tv_1);
break;
case R.id.tv_2:
setStateBg(R.id.tv_2);
break;
case R.id.tv_3:
setStateBg(R.id.tv_3);
break;
case R.id.tv_4:
setStateBg(R.id.tv_4);
break;
case R.id.tv_5:
setStateBg(R.id.tv_5);
break;
case R.id.tv_6:
setStateBg(R.id.tv_6);
break;
case R.id.tv_7:
setStateBg(R.id.tv_7);
break;
case R.id.tv_8:
setStateBg(R.id.tv_8);
break;
case R.id.tv_9:
setStateBg(R.id.tv_9);
break;
case R.id.tv_10:
setStateBg(R.id.tv_10);
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
// 设置城市
city = data.getIntExtra(ProvinceActivity.CITY_ID, ProvinceActivity.DEFAULT_CITY_ID);
city_tv.setText(data.getStringExtra(ProvinceActivity.CITY_NAME));
user.setUserCity(city);
} else {
file = imagePicker.onActivityResult(requestCode, resultCode, data);
if (file != null && !file.equals("")) {
user.setUserHead(file);
bitmapManager.loadBitmap(file, head_iv);
head_iv.setVisibility(View.VISIBLE);
chooseCamera.setVisibility(View.GONE);
hasHead = true;
}
}
}
/**
* 年龄滚轮的监听
*/
private WheelListener ageWheelListener = new WheelListener() {
@Override
public WheelAdapter onChange(WheelView wheel,
int oldValue,
int newValue) {
return null;
}
@Override
public void confirm(String str) {
StringUtil.setText(age_tv, str);
}
@Override
public void cancel() {
}
};
/**
* 发起网络请求
*/
public void onNetworkRequest() {
}
/**
* 网络请求失败
*/
public void onResultFail(String resutlt) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
T.showTips(Register4.this, R.drawable.tips_error, resutlt);
}
/**
* 网络请求成功
*/
public void onResultSuccess(NetworkEntity entity) {
if (entity.getRequest().getAction().equals(new FileRequest().getAction())) {
FileResponse fileResponse = (FileResponse) entity.getResponse();
sendRegisterRequest(fileResponse.getDetails()[0]);
}
if (entity.getRequest().getAction().equals(new Login_registerRequest().getAction())) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
T.showTips(Register4.this, R.drawable.tips_smile, "注册成功!");
Login_registerResponse registerResponse = (Login_registerResponse) entity.getResponse();
// 全局保存当前用
AppContext.getInstance().saveUserInfo(registerResponse.getDetails());
// 注册 openfire 聊天服务器
// 跳转到主界面
UIHelper.showLoginPage(this);
finish();
}
}
/**
* 发送注册的请求
*/
private void sendRegisterRequest(String fileUrl) {
Login_registerRequest request = new Login_registerRequest();
request.setUserName(user.getUserName());
request.setUserAge(user.getUserAge());
request.setUserCity(user.getUserCity());
request.setUserSex(user.getUserSex());
request.setUserEmail(user.getUserEmail());
request.setUserHeadUrl(fileUrl);
request.setUserPassword(user.getUserPassword());
request.setUserPhone(user.getUserPhone());
request.setUserState(user.getUserState());
request.setRegisterType(user.getRegisterType());
AppContext.getInstance().getmDataProvider().getJsonFromNetwork(request, this);
}
/**
* 发送文件上传请求
*/
private void sendFileRequest() {
String[] fileArray = new String[] { file };
FileRequest fileRequest = new FileRequest();
fileRequest.setFilePath(fileArray);
AppContext.getInstance().getmDataProvider().getJsonFromNetwork(fileRequest, this);
}
@Override
protected void onResume() {
StatService.onResume(this);
super.onResume();
}
@Override
public void onPause() {
StatService.onPause(this);
super.onResume();
}
}