package com.parttime.login;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.carson.constant.ConstantForSaveList;
import com.droid.carson.CityActivity;
import com.easemob.EMCallBack;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMContactManager;
import com.easemob.chat.EMGroupManager;
import com.easemob.chatuidemo.Constant;
import com.easemob.chatuidemo.db.UserDao;
import com.easemob.util.EMLog;
import com.easemob.util.HanziToPinyin;
import com.google.gson.Gson;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.parttime.base.CitySelectActivity;
import com.parttime.base.IntentManager;
import com.parttime.base.WithTitleActivity;
import com.parttime.constants.ApplicationConstants;
import com.parttime.constants.ApplicationInitCache;
import com.parttime.constants.SharedPreferenceConstants;
import com.parttime.main.MainTabActivity;
import com.parttime.net.BaseRequest;
import com.parttime.net.Callback;
import com.parttime.net.ErrorHandler;
import com.parttime.net.ResponseBaseCommonError;
import com.parttime.utils.SharePreferenceUtil;
import com.qingmu.jianzhidaren.BuildConfig;
import com.qingmu.jianzhidaren.R;
import com.quark.common.Url;
import com.quark.jianzhidaren.ApplicationControl;
import com.quark.jianzhidaren.BaseActivity;
import com.quark.volley.VolleySington;
import com.umeng.analytics.MobclickAgent;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by cjz on 2015/7/29.
*/
public class SetGenderActivity extends WithTitleActivity{
public static final String EXTRA_TELEPHONE = "extra_telephone";
public static final String EXTRA_CODE = "extra_code";
public static final String EXTRA_NAME = "extra_name";
public static final String EXTRA_PWD_ENCODED = "extra_pwd_encoded";
public static final String EXTRA_PWD = "extra_pwd";
private static final int REQUEST_CODE_LOCATION = 10001;
public static String PWD_ENCODED;
public static String PWD;
public static String TEL;
private String telephone;
private String code;
private String name;
private String pwdEncoded;
private String gender;
private boolean lock;
@ViewInject(R.id.fl_male)
private View viewMale;
@ViewInject(R.id.fl_female)
private View viewFemale;
private boolean enable;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_set_gender);
ViewUtils.inject(this);
super.onCreate(savedInstanceState);
getIntentData();
}
@Override
protected void onStart() {
super.onStart();
enable = true;
}
private void getIntentData(){
Intent intent = getIntent();
TEL = telephone = intent.getStringExtra(EXTRA_TELEPHONE);
code = intent.getStringExtra(EXTRA_CODE);
name = intent.getStringExtra(EXTRA_NAME);
PWD_ENCODED = pwdEncoded = intent.getStringExtra(EXTRA_PWD_ENCODED);
PWD = intent.getStringExtra(EXTRA_PWD);
}
@Override
protected void initViews() {
super.initViews();
center(R.string.set_gender);
}
@Override
public void onBackPressed() {
if(!lock) {
super.onBackPressed();
}
}
@OnClick(R.id.fl_male)
public void male(View v){
// showToast("male");
// startActivity(new Intent(this, Activity01.class));
if(!enable){
return;
}
enable = false;
gender = "1";
register();
}
@OnClick(R.id.fl_female)
public void female(View v){
// showToast("female");
// startActivity(new Intent(this, Activity01.class));
if(!enable){
return;
}
enable = false;
gender = "0";
register();
}
private void register(){
/*showWait(true);
Map<String, String> params = new HashMap<>();
params.put("telephone", telephone);
params.put("name", name);
params.put("password", pwdEncoded);
params.put("code", code);
params.put("city", "深圳");
params.put("sex", gender);
new BaseRequest().request(Url.COMPANY_REGISTER, params, VolleySington.getInstance().getRequestQueue(), new Callback() {
@Override
public void success(Object obj) throws JSONException {
showWait(false);
IntentManager.intentToLoginActivity(SetGenderActivity.this);
}
@Override
public void failed(Object obj) {
showWait(false);
IntentManager.intentToLoginActivity(SetGenderActivity.this);
}
});*/
Intent intent = new Intent();
intent.setClass(this, CitySelectActivity.class);
// startActivityForResult(intent, REQUEST_CODE_LOCATION);
intent.putExtra(CitySelectActivity.EXTRA_DIY_ACTION, new SelectCityAction());
intent.putExtra(CitySelectActivity.EXTRA_ACITON_EXTRA, new RegParams(telephone, code, name, pwdEncoded, gender));
startActivity(intent);
lock = true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
switch (requestCode){
case REQUEST_CODE_LOCATION:
String string = data.getExtras().getString(CityActivity.EXTRA_CITY);
showToast(string);
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
protected ViewGroup getLeftWrapper() {
return null;
}
@Override
protected ViewGroup getRightWrapper() {
return null;
}
@Override
protected TextView getCenter() {
return null;
}
public static class RegParams implements Serializable {
public String telephone;
public String code;
public String name;
public String pwdEncoded;
public String gender;
public RegParams(String telephone, String code, String name, String pwdEncoded, String gender) {
this.telephone = telephone;
this.code = code;
this.name = name;
this.pwdEncoded = pwdEncoded;
this.gender = gender;
}
}
public static class SelectCityAction implements CityActivity.DiyAction {
private String token;
private String user_id;
private String loginUrl;// 登陆url
private String IM_PASSWORD;// 环信登陆密码
private String IM_USERID;// 环信登陆账户
private String IM_AVATAR;// 环信头像
private String IM_NIKENAME;// 环信昵称
// 环信
private boolean progressShow;
@Override
public void clicked(int index, String city, Serializable extra, final BaseActivity activity) {
RegParams regParams = (RegParams) extra;
activity.showWait(true);
SharePreferenceUtil.getInstance(activity).saveSharedPreferences(SharedPreferenceConstants.INIT_CITY, city);
Map<String, String> params = new HashMap<>();
params.put("telephone", regParams.telephone);
params.put("name", regParams.name);
params.put("password", regParams.pwdEncoded);
params.put("code", regParams.code);
params.put("city", city);
params.put("sex", regParams.gender);
new BaseRequest().request(Url.COMPANY_REGISTER, params, VolleySington.getInstance().getRequestQueue(), new Callback() {
@Override
public void success(Object obj) throws JSONException {
activity.showWait(false);
/*IntentManager.intentToLoginActivity(activity);
activity.finish();*/
login(activity);
}
@Override
public void failed(Object obj) {
activity.showWait(false);
new ErrorHandler(activity, obj).showToast();
// IntentManager.intentToLoginActivity(activity);
}
});
}
public void login(final BaseActivity activity) {
activity.showWait(true);
StringRequest request = new StringRequest(Request.Method.POST,
Url.COMPANY_LOGIN, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
activity.showWait(false);
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 1) {
// 记录用户id 环信登陆id 密码 昵称 头像
JSONObject jsonts = json
.getJSONObject("loginResponse");
token = jsonts.getString("token");
user_id = jsonts.getString("company_id");
IM_PASSWORD = jsonts.getString("IM_PASSWORD");
IM_USERID = jsonts.getString("IM_USERID");
IM_AVATAR = jsonts.getString("IM_AVATAR");
IM_NIKENAME = jsonts.getString("IM_NIKENAME");
int type = jsonts.getInt("type");
ApplicationConstants.IM_NIKENAME = IM_NIKENAME;
loginIM(activity, IM_USERID, IM_PASSWORD);
} else {
ResponseBaseCommonError error = new Gson().fromJson(response, ResponseBaseCommonError.class);
if(error != null) {
activity.showToast(error.msg);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
activity.showWait(false);
activity.showToast(activity.getResources().getString(
R.string.regist_request_server_fail));
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("telephone", TEL);
map.put("password", PWD_ENCODED);
return map;
}
};
RequestQueue queue = VolleySington.getInstance().getRequestQueue();
queue.add(request);
request.setRetryPolicy(new DefaultRetryPolicy(
ConstantForSaveList.DEFAULTRETRYTIME * 1000, 1, 1.0f));
}
private void loginSuccess2Umeng(final BaseActivity activity, final long start) {
activity.runOnUiThread(new Runnable() {
public void run() {
long costTime = System.currentTimeMillis() - start;
Map<String, String> params = new HashMap<String, String>();
params.put("status", "success");
MobclickAgent.onEventValue(activity, "login1",
params, (int) costTime);
MobclickAgent.onEventDuration(activity, "login1",
(int) costTime);
}
});
}
protected void setUserHearder(String username,
com.easemob.chatuidemo.domain.User user) {
String headerName = null;
if (!TextUtils.isEmpty(user.getNick())) {
headerName = user.getNick();
} else {
headerName = user.getUsername();
}
if (username.equals(Constant.NEW_FRIENDS_USERNAME)) {
user.setHeader("");
} else if (Character.isDigit(headerName.charAt(0))) {
user.setHeader("#");
} else {
user.setHeader(HanziToPinyin.getInstance()
.get(headerName.substring(0, 1)).get(0).target.substring(0,
1).toUpperCase());
char header = user.getHeader().toLowerCase().charAt(0);
if (header < 'a' || header > 'z') {
user.setHeader("#");
}
}
}
private void loginFailure2Umeng(final BaseActivity activity, final long start, final int code,
final String message) {
activity.runOnUiThread(new Runnable() {
public void run() {
long costTime = System.currentTimeMillis() - start;
Map<String, String> params = new HashMap<String, String>();
params.put("status", "failure");
params.put("error_code", code + "");
params.put("error_description", message);
MobclickAgent.onEventValue(activity, "login1",
params, (int) costTime);
MobclickAgent.onEventDuration(activity, "login1",
(int) costTime);
}
});
}
// 环信 登陆
private void loginIM(final BaseActivity activity, String userName, String passWord) {
ApplicationControl.currentUserNick = ApplicationConstants.IM_NIKENAME;
// 如果用户名密码都有,直接进入主页面
/*
* if (DemoHXSDKHelper.getInstance().isLogined()) { autoLogin = true;
* startActivity(new Intent(Login.this, Main.class)); return; }
*/
// ApplicationControl.currentUserNick = "ydt01";
final String username = userName;
final String password = passWord;
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
progressShow = true;
final ProgressDialog pd = new ProgressDialog(
activity);
pd.setCanceledOnTouchOutside(false);
pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
progressShow = false;
}
});
pd.setMessage("正在登录...");
pd.show();
final long start = System.currentTimeMillis();
// 调用sdk登陆方法登陆聊天服务器
EMChatManager.getInstance().login(username, password,
new EMCallBack() {
@Override
public void onSuccess() {
// umeng自定义事件,开发者可以把这个删掉
loginSuccess2Umeng(activity, start);
if (!progressShow) {
return;
}
// 登陆成功,保存用户名密码
ApplicationControl.getInstance().setUserName(
username);
ApplicationControl.getInstance().setPassword(
password);
activity.runOnUiThread(new Runnable() {
public void run() {
pd.setMessage("正在获取未读信息列表...");
}
});
try {
// ** 第一次登录或者之前logout后,加载所有本地群和回话
// ** manually load all local groups and
// conversations in case we are auto login
EMGroupManager.getInstance().loadAllGroups();
EMChatManager.getInstance()
.loadAllConversations();
// demo中简单的处理成每次登陆都去获取好友username,开发者自己根据情况而定
List<String> usernames = EMContactManager
.getInstance().getContactUserNames();
Map<String, com.easemob.chatuidemo.domain.User> userlist = new HashMap<>();
for (String username : usernames) {
com.easemob.chatuidemo.domain.User user = new com.easemob.chatuidemo.domain.User();
user.setUsername(username);
setUserHearder(username, user);
userlist.put(username, user);
if(BuildConfig.DEBUG) {
Log.i("loginIM", "username = " + username);
}
}
// 添加user"申请与通知"
com.easemob.chatuidemo.domain.User newFriends = new com.easemob.chatuidemo.domain.User();
newFriends
.setUsername(Constant.NEW_FRIENDS_USERNAME);
newFriends.setNick(activity.getString(R.string.apply_notify));
newFriends.setHeader("");
userlist.put(Constant.NEW_FRIENDS_USERNAME,
newFriends);
// 添加"群聊"
com.easemob.chatuidemo.domain.User groupUser = new com.easemob.chatuidemo.domain.User();
groupUser.setUsername(Constant.GROUP_USERNAME);
groupUser.setNick(activity.getString(R.string.group_chat));
groupUser.setHeader("");
userlist.put(Constant.GROUP_USERNAME, groupUser);
// 添加"官方账号"
com.easemob.chatuidemo.domain.User publicCount = new com.easemob.chatuidemo.domain.User();
publicCount.setUsername(Constant.PUBLIC_COUNT);
publicCount.setNick(activity.getString(R.string.public_count));
publicCount.setHeader("");
userlist.put(Constant.PUBLIC_COUNT, publicCount);
// 存入内存
ApplicationControl.getInstance()
.setContactList(userlist);
// 存入db
UserDao dao = new UserDao(
activity);
List<com.easemob.chatuidemo.domain.User> users = new ArrayList<>(
userlist.values());
dao.saveContactList(users);
// 获取群聊列表(群聊里只有groupid和groupname等简单信息,不包含members),sdk会把群组存入到内存和db中
EMGroupManager.getInstance()
.getGroupsFromServer();
ApplicationInitCache.initData(SharePreferenceUtil.getInstance(activity), new Gson());
} catch (Exception e) {
e.printStackTrace();
activity.runOnUiThread(new Runnable() {
public void run() {
if (!activity
.isFinishing())
pd.dismiss();
ApplicationControl.getInstance().logout(
null);
Toast.makeText(activity.getApplicationContext(),
"登录失败", Toast.LENGTH_SHORT).show();
}
});
return;
}
// 更新当前用户的nickname 此方法的作用是在ios离线推送时能够显示用户nick
boolean updatenick = EMChatManager.getInstance()
.updateCurrentUserNick(
ApplicationControl.currentUserNick);
if (!updatenick) {
EMLog.e("LoginActivity",
"update current user nick fail");
}
if (!activity.isFinishing())
pd.dismiss();
// 进入主页面
SharedPreferences sp = activity.getSharedPreferences(
"jrdr.setting", MODE_PRIVATE);
SharedPreferences.Editor edit = sp.edit();
edit.putString("userId", "" + user_id);
edit.putString("token", token);
edit.putString("IM_PASSWORD", IM_PASSWORD);
edit.putString("IM_USERID", IM_USERID);
edit.putString("IM_AVATAR", IM_AVATAR);
edit.putString("IM_NIKENAME", IM_NIKENAME);
// 记住密码供下次登陆
edit.putString("remember_tele", TEL);
edit.putString("remember_pwd", PWD);
edit.commit();
MainTabActivity.showAnim = true;
Intent intent = new Intent();
intent.setClass(activity,
MainTabActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);
activity.finish();
}
@Override
public void onProgress(int progress, String status) {
}
@Override
public void onError(final int code, final String message) {
loginFailure2Umeng(activity, start, code, message);
if (!progressShow) {
return;
}
activity.runOnUiThread(new Runnable() {
public void run() {
pd.dismiss();
activity.showToast("登录失败");
IntentManager.intentToLoginActivity(activity);
}
});
}
});
}
}
}
}