package com.snail.travellingTrail.common.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.tsz.afinal.FinalHttp;
import net.tsz.afinal.http.AjaxCallBack;
import net.tsz.afinal.http.AjaxParams;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import com.snail.travellingTrail.R;
import com.snail.travellingTrail.common.RequestAddress;
import com.snail.travellingTrail.common.ResponseList;
import com.snail.travellingTrail.slidingmenu.model.Birthday;
import com.snail.travellingTrail.slidingmenu.view.CityPicker;
import com.snail.travellingTrail.slidingmenu.view.ScrollerNumberPicker;
import com.snail.travellingTrail.slidingmenu.view.ScrollerNumberPicker.OnSelectListener;
public final class CustomMenu implements OnSelectListener {
private static final String TAG="CustomMenu";
private static PopupWindow pop=null;
private final Activity activity;
private static final int SEX = 0;
private static final int BIRTHDAY = 1;
private static final int ADDRESS = 2;
private static final int YEAR = 0;
private static final int MONTH = 1;
private static final int DAY = 3;
private static final int MAN = 0;
private static final int WOMAN = 1;
CityPicker mCityPicker ;
ScrollerNumberPicker yearnp,monthnp,daynp;
Map<String,Object> map;
Button mButton;
TextView manTv,womanTv,cancelTv;
public CustomMenu(Activity activity) {
// TODO Auto-generated constructor stub
this.activity = activity;
}
public PopupWindow getMenu(OnTouchListener touchListener,OnKeyListener keyListener,int what) {
map = new HashMap<String, Object>();
View view = null ;// layout_custom_menu菜单的布局文件
switch (what) {
case SEX:
view = activity.getLayoutInflater().inflate(R.layout.menu_useredit_info_sex, null);
manTv = (TextView)view.findViewById(R.id.menu_useredit_info_sex_man);
womanTv = (TextView)view.findViewById(R.id.menu_useredit_info_sex_women);
cancelTv = (TextView)view.findViewById(R.id.menu_useredit_info_sex_cancel);
manTv.setOnClickListener(new ButtonClick());
womanTv.setOnClickListener(new ButtonClick());
cancelTv.setOnClickListener(new ButtonClick());
break;
case BIRTHDAY:
view = activity.getLayoutInflater().inflate(R.layout.menu_useredit_info_birthday, null);
mButton = (Button)view.findViewById(R.id.menu_useredit_info_brithday_btn);
mButton.setOnClickListener(new ButtonClick());
birthday(view);
break;
case ADDRESS:
view = activity.getLayoutInflater().inflate(R.layout.menu_useredit_info_address, null);
mCityPicker = (CityPicker)view.findViewById(R.id.menu_useredit_info_address_citypicker);
mButton = (Button)view.findViewById(R.id.menu_useredit_info_address_btn);
mButton.setOnClickListener(new ButtonClick());
break;
default:
break;
}
pop = new PopupWindow(view,ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
pop.setAnimationStyle(R.style.pop_anim_style);
pop.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.ic_press_normal));// 这句是关键
pop.setFocusable(true);
pop.setTouchable(true);
pop.setOutsideTouchable(true);
view.setClickable(true);
view.setFocusableInTouchMode(true);
pop.setTouchInterceptor(touchListener);
view.setOnKeyListener(keyListener);
return pop;
}
class ButtonClick implements OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.menu_useredit_info_address_btn:
submit(ADDRESS, getaddress());
break;
case R.id.menu_useredit_info_brithday_btn:
submit(BIRTHDAY, getbrithday());
break;
case R.id.menu_useredit_info_sex_man:
submit(SEX, "1");
break;
case R.id.menu_useredit_info_sex_women:
submit(SEX, "0");
break;
case R.id.menu_useredit_info_sex_cancel:
pop.dismiss();
break;
default:
break;
}
}
}
private void birthday(View view) {
yearnp = (ScrollerNumberPicker)view.findViewById(R.id.yearnp);
monthnp = (ScrollerNumberPicker)view.findViewById(R.id.monthnp);
daynp = (ScrollerNumberPicker)view.findViewById(R.id.daynp);
yearnp.setOnSelectListener(this);
monthnp.setOnSelectListener(this);
setPickerData();
}
public String getbrithday() {
return Birthday.Year+"-"+Birthday.Month+"-"+Birthday.Day;
}
public String getaddress() {
return mCityPicker.getCity_string();
}
@Override
public void endSelect(int viewId,int id, String text) {
Log.i(TAG, ""+viewId+" "+R.id.monthnp);
switch (viewId) {
case R.id.monthnp:
Log.i(TAG, "R.id.monthnp");
if(isLeapYear(Integer.valueOf(Birthday.Year))){
if(text.equals("2")){
daynp.setData(getData(DAY, 1));
daynp.setDefault(6);
}else{
setDefultDay(text);
}
}else{
if(text.equals("2")){
daynp.setData(getData(DAY, 0));
daynp.setDefault(6);
}else{
setDefultDay(text);
}
}
Birthday.Month = text;
break;
case R.id.yearnp:
Log.i(TAG, "R.id.yearnp");
if(isLeapYear(Integer.valueOf(text))){
if(Birthday.Month.equals("2")){
daynp.setData(getData(DAY, 1));
daynp.setDefault(6);
}else{
setDefultDay(Birthday.Month);
}
}else{
if(Birthday.Month.equals("2")){
daynp.setData(getData(DAY, 0));
daynp.setDefault(6);
}else{
setDefultDay(Birthday.Month);
}
}
Birthday.Year = text;
break;
case R.id.daynp:
Birthday.Day = text;
break;
default:
break;
}
}
private void setDefultDay(String text){
if(text.equals("4")||text.equals("6")||text.equals("9")||text.equals("11")){
daynp.setData(getData(DAY, 2));
daynp.setDefault(6);
}else{
daynp.setData(getData(DAY, 3));
daynp.setDefault(6);
}
}
@Override
public void selecting(int viewId,int id, String text) {
}
public boolean isLeapYear(int year){
return (year%4==0&&year%100!=0)||year%400==0;
}
private void setPickerData(){
yearnp.setData(getData(YEAR, 0));
yearnp.setDefault(7);
monthnp.setData(getData(MONTH, 0));
monthnp.setDefault(6);
daynp.setData(getData(DAY, 3));
daynp.setDefault(6);
}
private ArrayList<String> getData(int data,int day){
ArrayList<String> datas = new ArrayList<String>();
switch (data) {
case YEAR:
for (int i = 0; i < 50; i++) {
datas.add(String.valueOf(1970+i));
}
break;
case MONTH:
for (int i = 0; i < 12; i++) {
datas.add(String.valueOf(1+i));
}
break;
case DAY:
switch (day) {
case 0:
for (int i = 0; i < 28; i++) {
datas.add(String.valueOf(1+i));
}
break;
case 1:
for (int i = 0; i < 29; i++) {
datas.add(String.valueOf(1+i));
}
break;
case 2:
for (int i = 0; i < 30; i++) {
datas.add(String.valueOf(1+i));
}
break;
case 3:
for (int i = 0; i < 31; i++) {
datas.add(String.valueOf(1+i));
}
break;
default:
break;
}
break;
default:
break;
}
return datas;
}
private void submit(int editType, final String content) {
final HashMap<String, Object> nMap = new HashMap<String, Object>();
AjaxParams mAjaxParams = new AjaxParams();
switch (editType) {
case SEX:
nMap.put("Us_Birthday", ResponseList.MyInfoMap.get("Us_Birthday"));
nMap.put("Us_Addresss", ResponseList.MyInfoMap.get("Us_Addresss"));
// final HttpUtil mHttpUtil = ;
new Thread(new Runnable() {
@Override
public void run() {
nMap.put("Us_Sex", Integer.valueOf(content));
String result= "";
result = new HttpUtil().queryStringForPost(RequestAddress.MODIFY_DATA+ResponseList.MyInfoMap.get("Us_Info_Us_Id"),nMap);
if(result.equals("200")){
map.put("Us_Sex", content);
map.put("Us_Birthday", ResponseList.MyInfoMap.get("Us_Birthday"));
map.put("Us_Addresss", ResponseList.MyInfoMap.get("Us_Addresss"));
analyzeJson();
ToastHelper.showToast(activity, "修改成功", Toast.LENGTH_SHORT);
}else {
ToastHelper.showToast(activity, "修改失败", Toast.LENGTH_SHORT);
}
}
}).start();
break;
case BIRTHDAY:
mAjaxParams.put("Us_Birthday", content);
mAjaxParams.put("Us_Sex", ResponseList.MyInfoMap.get("Us_Sex")+"");
mAjaxParams.put("Us_Addresss", ResponseList.MyInfoMap.get("Us_Addresss")+"");
map.put("Us_Birthday", content);
map.put("Us_Sex", ResponseList.MyInfoMap.get("Us_Sex"));
map.put("Us_Addresss", ResponseList.MyInfoMap.get("Us_Addresss"));
http(mAjaxParams);
break;
case ADDRESS:
mAjaxParams.put("Us_Addresss", content);
mAjaxParams.put("Us_Birthday", ResponseList.MyInfoMap.get("Us_Birthday")+"");
mAjaxParams.put("Us_Sex", ResponseList.MyInfoMap.get("Us_Sex")+"");
map.put("Us_Addresss", content);
map.put("Us_Birthday", ResponseList.MyInfoMap.get("Us_Birthday"));
map.put("Us_Sex", ResponseList.MyInfoMap.get("Us_Sex"));
http(mAjaxParams);
break;
default:
break;
}
//
}
private void http(AjaxParams mAjaxParams){
FinalHttp mFinalHttp = new FinalHttp();
// mAjaxParams.put("Us_Email", ResponseList.MyInfoMap.get("Us_Email"));
mAjaxParams.put("Us_Info_Us_Id", ResponseList.MyInfoMap.get("Us_Info_Us_Id")+"");
// mAjaxParams.put("Us_Avatar", ResponseList.MyInfoMap.get("Us_Avatar"));
// mAjaxParams.put("Us_Info_Snapshot", ResponseList.MyInfoMap.get("Us_Info_Snapshot"));
mAjaxParams.put("Us_Introduce", ResponseList.MyInfoMap.get("Us_Introduce")+"");
mAjaxParams.put("Us_Location", ResponseList.MyInfoMap.get("Us_Location")+"");
mAjaxParams.put("Us_Sinature", ResponseList.MyInfoMap.get("Us_Sinature")+"");
mAjaxParams.put("Us_Nickname", ResponseList.MyInfoMap.get("Us_Nickname")+"");
mFinalHttp.post(RequestAddress.MODIFY_DATA+ResponseList.MyInfoMap.get("Us_Info_Us_Id"), mAjaxParams, new AjaxCallBack<Object>() {
@Override
public void onSuccess(Object t) {
Log.i("onSuccess", t.toString());
DialogTool.cancelProgressDialog();
ToastHelper.showToast(activity, "修改成功", Toast.LENGTH_SHORT);
analyzeJson();
super.onSuccess(t);
}
@Override
public void onFailure(Throwable t, int errorNo, String strMsg) {
DialogTool.cancelProgressDialog();
Log.i("onFailure", errorNo + " " + strMsg);
super.onFailure(t, errorNo, strMsg);
}
});
}
private void analyzeJson(){
map.put("Us_Info_Us_Id", ResponseList.MyInfoMap.get("Us_Info_Us_Id"));
map.put("Us_Sinature", ResponseList.MyInfoMap.get("Us_Sinature"));
map.put("Us_Location", ResponseList.MyInfoMap.get("Us_Location"));
map.put("Us_Nickname", ResponseList.MyInfoMap.get("Us_Nickname"));
map.put("Us_Introduce", ResponseList.MyInfoMap.get("Us_Introduce"));
map.put("Us_Avatar", ResponseList.MyInfoMap.get("Us_Avatar"));
map.put("Us_Info_Snapshot", ResponseList.MyInfoMap.get("Us_Info_Snapshot"));
map.put("Us_Email", ResponseList.MyInfoMap.get("Us_Email"));
ResponseList.MyInfoMap = map;
sentWhat(0);
}
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
pop.dismiss();
break;
default:
break;
}
super.handleMessage(msg);
}
};
private void sentWhat(int what){
Message msg = Message.obtain();
msg.what = what;
mHandler.sendMessage(msg);
}
}