/**
*
*/
package com.d3.d3xmpp.fragments;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import com.d3.d3xmpp.R;
import com.d3.d3xmpp.activites.ChangePwdActivity;
import com.d3.d3xmpp.activites.CropImageActivity;
import com.d3.d3xmpp.activites.LoginActivity;
import com.d3.d3xmpp.activites.PicSrcPickerActivity;
import com.d3.d3xmpp.constant.Constants;
import com.d3.d3xmpp.constant.MyApplication;
import com.d3.d3xmpp.d3View.D3Fragment;
import com.d3.d3xmpp.d3View.D3View;
import com.d3.d3xmpp.util.CircularImage;
import com.d3.d3xmpp.util.MyAndroidUtil;
import com.d3.d3xmpp.util.Tool;
import com.d3.d3xmpp.util.Util;
import com.d3.d3xmpp.util.XmppLoadThread;
import com.d3.d3xmpp.util.wheel.OnWheelChangedListener;
import com.d3.d3xmpp.util.wheel.WheelView;
import com.d3.d3xmpp.util.wheel.adapters.ArrayWheelAdapter;
import com.d3.d3xmpp.util.wheel.model.CityModel;
import com.d3.d3xmpp.util.wheel.model.DistrictModel;
import com.d3.d3xmpp.util.wheel.model.ProvinceModel;
import com.d3.d3xmpp.util.wheel.service.XmlParserHandler;
import com.d3.d3xmpp.xmpp.XmppConnection;
/**
* @author MZH
*
*/
public class MeFragment extends D3Fragment implements OnWheelChangedListener{
@D3View(click="onClick")LinearLayout headLayout,nickLayout,nameLayout,emailLayout,phoneLayout,pwdLayout,sexLayout,signLayout,adrLayout,changeLayout,changeAdrLayout;
@D3View TextView usernameView,nameView,emailView,phoneView,sexView,signView,changeNameView,adrView; //nickView,
@D3View ScrollView scrollView;
@D3View EditText changeText;
@D3View RadioGroup sexGroup;
@D3View RadioButton manRadio,womanRadio;
@D3View CheckBox shakeBtn, soundBtn,shareBtn;
@D3View(click="onClick") CircularImage headView;
@D3View(click="onClick")Button exitBtn,subBtn,sureBtn,cancelBtn;
private String field;
private TextView changeView;
private WheelView mViewProvince,mViewCity,mViewDistrict;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = setContentView(inflater, R.layout.acti_me);
mViewProvince = (WheelView) view.findViewById(R.id.id_province);
mViewCity = (WheelView) view.findViewById(R.id.id_city);
mViewDistrict = (WheelView) view.findViewById(R.id.id_district);
mViewProvince.addChangingListener(this);
mViewCity.addChangingListener(this);
mViewDistrict.addChangingListener(this);
setUpData();
// if (Constants.USER_NAME!=null) {
// ImgConfig.showHeadImg(Constants.USER_NAME,headView);
// }
if (Constants.loginUser!=null) {
if (Constants.USER_NAME!=null) {
usernameView.setText(Constants.USER_NAME);
}
if (Constants.loginUser.nickname!=null) {
nameView.setText(Constants.loginUser.nickname);
}
if (Constants.loginUser.email!=null) {
emailView.setText(Constants.loginUser.email);
}
if (Constants.loginUser.mobile!=null) {
phoneView.setText(Constants.loginUser.mobile);
}
if (Constants.loginUser.sex!=null) {
sexView.setText(Constants.loginUser.sex);
}
if (Constants.loginUser.intro!=null) {
signView.setText(Constants.loginUser.intro);
}
if (Constants.loginUser.bitmap!=null) {
headView.setImageBitmap(Constants.loginUser.bitmap);
}
if (Constants.loginUser.adr!=null) {
adrView.setText(Constants.loginUser.adr);
}
}
sexGroup.setOnCheckedChangeListener(new android.widget.RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == manRadio.getId()) {
changeText.setText("男");
}
else {
changeText.setText("女");
}
}
});
shakeBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
MyAndroidUtil.editXml("isShake", true);
} else {
MyAndroidUtil.editXml("isShake", false);
}
}
});
soundBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
MyAndroidUtil.editXml("isSound", true);
} else {
MyAndroidUtil.editXml("isSound", false);
}
}
});
shareBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
MyAndroidUtil.editXml("isShare", true);
MyApplication.getInstance().uploadAdr();
} else {
MyAndroidUtil.editXml("isShare", false);
MyApplication.getInstance().clearAdr();
}
}
});
shareBtn.setChecked(MyApplication.sharedPreferences.getBoolean("isShare", true));
shakeBtn.setChecked(MyApplication.sharedPreferences.getBoolean("isShake", true));
soundBtn.setChecked(MyApplication.sharedPreferences.getBoolean("isSound", true));
return view;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.sureBtn:
showSelectedResult();
break;
case R.id.exitBtn:
MyAndroidUtil.removeXml(Constants.LOGIN_PWD);
if (!MyApplication.sharedPreferences.getBoolean(Constants.LOGIN_CHECK, false)) {
MyAndroidUtil.removeXml(Constants.LOGIN_ACCOUNT);
}
Constants.USER_NAME = "";
Constants.loginUser = null;
XmppConnection.getInstance().getFriendList().clear();
XmppConnection.getInstance().myRooms.clear();
XmppConnection.getInstance().closeConnection();
getActivity().startActivity(new Intent(getActivity(), LoginActivity.class));
getActivity().finish();
break;
case R.id.subBtn:
//提交修改
String cText = changeText.getEditableText().toString();
if (field.equals("mobile") && !Util.getInstance().isMobileNumber(cText)) {
Tool.initToast(getActivity().getApplicationContext(), "不是手机号码");
}
else if(field.equals("email") && !Util.getInstance().isEmail(cText)){
Tool.initToast(getActivity().getApplicationContext(), "不是邮箱");
}
else {
changeView.setText(changeText.getEditableText().toString());
Constants.loginUser.vCard.setField(field, changeText.getEditableText().toString());
XmppConnection.getInstance().changeVcard(Constants.loginUser.vCard);
changeLayout.setVisibility(View.GONE);
changeText.setText("");
}
break;
case R.id.cancelBtn:
changeLayout.setVisibility(View.GONE);
changeText.setText("");
break;
case R.id.headView:
Intent intent = new Intent();
CropImageActivity.isAutoSend = false;
intent.setClass(getActivity(), PicSrcPickerActivity.class);
getActivity().startActivityForResult(intent,PicSrcPickerActivity.CROP);
break;
// case R.id.nickLayout:
// showChangelayout("修改昵称", "nickName", nickView);
// break;
case R.id.nameLayout:
showChangelayout("修改昵称", "nickName", nameView);
break;
case R.id.emailLayout:
showChangelayout("修改邮箱", "email", emailView);
break;
case R.id.phoneLayout:
showChangelayout("修改手机号码", "mobile", phoneView);
break;
case R.id.pwdLayout:
startActivity(new Intent(getActivity(), ChangePwdActivity.class));
break;
case R.id.sexLayout:
showChangelayout("修改性别", "sex", sexView);
break;
case R.id.adrLayout:
// showChangelayout("修改地区", "adr", adrView);
changeAdrLayout.setVisibility(View.VISIBLE);
break;
case R.id.signLayout:
showChangelayout("修改签名", "intro", signView);
break;
default:
break;
}
}
/**
* @param name //显示修改XXX
* @param field //修改的字段名
* @param fieldView //修改的view
*/
public void showChangelayout(String name,String field,TextView fieldView) {
changeLayout.setVisibility(View.VISIBLE);
if (field.equals("sex")) {
sexGroup.setVisibility(View.VISIBLE);
changeText.setVisibility(View.INVISIBLE);
}
else {
sexGroup.setVisibility(View.GONE);
changeText.setVisibility(View.VISIBLE);
}
changeNameView.setText(name);
this.field = field;
this.changeView = fieldView;
scrollView.fullScroll(ScrollView.FOCUS_UP);
}
public void changeHead(final String imgPath) {
new XmppLoadThread(getActivity()) {
@Override
protected void result(Object object) {
if (object!=null) {
headView.setImageBitmap((Bitmap)object);
}
}
@Override
protected Object load() {
return XmppConnection.getInstance().changeImage(new File(imgPath));
}
};
}
//以下是选地区用的。
/**
* 所有省
*/
protected String[] mProvinceDatas;
/**
* key - 省 value - 市
*/
protected Map<String, String[]> mCitisDatasMap = new HashMap<String, String[]>();
/**
* key - 市 values - 区
*/
protected Map<String, String[]> mDistrictDatasMap = new HashMap<String, String[]>();
/**
* key - 区 values - 邮编
*/
protected Map<String, String> mZipcodeDatasMap = new HashMap<String, String>();
/**
* 当前省的名称
*/
protected String mCurrentProviceName;
/**
* 当前市的名称
*/
protected String mCurrentCityName;
/**
* 当前区的名称
*/
protected String mCurrentDistrictName ="";
/**
* 当前区的邮政编码
*/
protected String mCurrentZipCode ="";
/**
* 解析省市区的XML数据
*/
protected void initProvinceDatas()
{
List<ProvinceModel> provinceList = null;
AssetManager asset = getActivity().getAssets();
try {
InputStream input = asset.open("province_data.xml");
// 创建一个解析xml的工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
// 解析xml
SAXParser parser = spf.newSAXParser();
XmlParserHandler handler = new XmlParserHandler();
parser.parse(input, handler);
input.close();
// 获取解析出来的数据
provinceList = handler.getDataList();
//*/ 初始化默认选中的省、市、区
if (provinceList!= null && !provinceList.isEmpty()) {
mCurrentProviceName = provinceList.get(0).getName();
List<CityModel> cityList = provinceList.get(0).getCityList();
if (cityList!= null && !cityList.isEmpty()) {
mCurrentCityName = cityList.get(0).getName();
List<DistrictModel> districtList = cityList.get(0).getDistrictList();
mCurrentDistrictName = districtList.get(0).getName();
mCurrentZipCode = districtList.get(0).getZipcode();
}
}
//*/
mProvinceDatas = new String[provinceList.size()];
for (int i=0; i< provinceList.size(); i++) {
// 遍历所有省的数据
mProvinceDatas[i] = provinceList.get(i).getName();
List<CityModel> cityList = provinceList.get(i).getCityList();
String[] cityNames = new String[cityList.size()];
for (int j=0; j< cityList.size(); j++) {
// 遍历省下面的所有市的数据
cityNames[j] = cityList.get(j).getName();
List<DistrictModel> districtList = cityList.get(j).getDistrictList();
String[] distrinctNameArray = new String[districtList.size()];
DistrictModel[] distrinctArray = new DistrictModel[districtList.size()];
for (int k=0; k<districtList.size(); k++) {
// 遍历市下面所有区/县的数据
DistrictModel districtModel = new DistrictModel(districtList.get(k).getName(), districtList.get(k).getZipcode());
// 区/县对于的邮编,保存到mZipcodeDatasMap
mZipcodeDatasMap.put(districtList.get(k).getName(), districtList.get(k).getZipcode());
distrinctArray[k] = districtModel;
distrinctNameArray[k] = districtModel.getName();
}
// 市-区/县的数据,保存到mDistrictDatasMap
mDistrictDatasMap.put(cityNames[j], distrinctNameArray);
}
// 省-市的数据,保存到mCitisDatasMap
mCitisDatasMap.put(provinceList.get(i).getName(), cityNames);
}
} catch (Throwable e) {
e.printStackTrace();
} finally {
}
}
private void setUpData() {
initProvinceDatas();
mViewProvince.setViewAdapter(new ArrayWheelAdapter<String>(getActivity(), mProvinceDatas));
// 设置可见条目数量
mViewProvince.setVisibleItems(7);
mViewCity.setVisibleItems(7);
mViewDistrict.setVisibleItems(7);
updateCities();
updateAreas();
}
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
// TODO Auto-generated method stub
if (wheel == mViewProvince) {
updateCities();
} else if (wheel == mViewCity) {
updateAreas();
} else if (wheel == mViewDistrict) {
mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[newValue];
mCurrentZipCode = mZipcodeDatasMap.get(mCurrentDistrictName);
}
}
/**
* 根据当前的市,更新区WheelView的信息
*/
private void updateAreas() {
int pCurrent = mViewCity.getCurrentItem();
mCurrentCityName = mCitisDatasMap.get(mCurrentProviceName)[pCurrent];
String[] areas = mDistrictDatasMap.get(mCurrentCityName);
if (areas == null) {
areas = new String[] { "" };
}
mViewDistrict.setViewAdapter(new ArrayWheelAdapter<String>(getActivity(), areas));
mViewDistrict.setCurrentItem(0);
}
/**
* 根据当前的省,更新市WheelView的信息
*/
private void updateCities() {
int pCurrent = mViewProvince.getCurrentItem();
mCurrentProviceName = mProvinceDatas[pCurrent];
String[] cities = mCitisDatasMap.get(mCurrentProviceName);
if (cities == null) {
cities = new String[] { "" };
}
mViewCity.setViewAdapter(new ArrayWheelAdapter<String>(getActivity(), cities));
mViewCity.setCurrentItem(0);
updateAreas();
}
private void showSelectedResult() {
Toast.makeText(getActivity(), "当前选中:"+mCurrentProviceName+","+mCurrentCityName+","
+mCurrentDistrictName+","+mCurrentZipCode, Toast.LENGTH_SHORT).show();
adrView.setText(mCurrentDistrictName);
Constants.loginUser.vCard.setField("adr", mCurrentDistrictName);
XmppConnection.getInstance().changeVcard(Constants.loginUser.vCard);
changeAdrLayout.setVisibility(View.GONE);
}
@Override
public void onResume() {
changeText.clearFocus();
super.onResume();
}
}