package com.parttime.login; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; 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.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.carson.constant.ConstantForSaveList; import com.carson.constant.JiaoyanUtil; import com.droid.carson.Activity01; 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.DemoApplication; import com.easemob.chatuidemo.DemoHXSDKHelper; 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.event.OnClick; 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.type.AccountType; import com.parttime.utils.AndroidUtils; 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.jianzhidaren.FeiJiPageActivity; import com.quark.jianzhidaren.ForgetPwdActivity; import com.quark.jianzhidaren.LaheiPageActivity; import com.quark.jianzhidaren.RegisterActivity; import com.quark.ui.widget.LineEditText; import com.quark.utils.Util; import com.quark.volley.VolleySington; import com.umeng.analytics.MobclickAgent; /** * 登陆 * * @author carson * */ public class FindPJLoginActivity extends BaseActivity { public static final String SP_JRDR_SETTING = "jrdr.setting"; public static final String EXTRA_USER_ID = "userId"; public static final String EXTRA_REMEMBER_TELE = "remember_tele"; public static final String EXTRA_REMEMBER_PWD = "remember_pwd"; private Button login, regin; private TextView forgetPwd; static String url; private ImageView logoImv;// 图标 商家端的头像换为红色、用户端蓝色 // private TextView logoTextView;// 找兼职、招兼职 private String telephoneStr; private String passwordStr; EditText telephoneView; EditText passwordView; public static FindPJLoginActivity instance; private SharedPreferences sp; // 环信 private boolean progressShow; private boolean autoLogin = false; private String carson_user_id;// 判断是否保存的用户 private boolean showAnim; @Override protected void onResume() { super.onResume(); if (autoLogin) { return; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sp = getSharedPreferences(SP_JRDR_SETTING, MODE_PRIVATE); // 如果用户名密码都有,直接进入主页面 if (DemoHXSDKHelper.getInstance().isLogined()) { carson_user_id = sp.getString(EXTRA_USER_ID, ""); if (carson_user_id != null && !"".equals(carson_user_id)) { autoLogin = true; int accountType = SharePreferenceUtil.getInstance(FindPJLoginActivity.this).loadIntSharedPreference(SharedPreferenceConstants.USER_TYPE); if(accountType == AccountType.AGENT){ startActivity(new Intent(FindPJLoginActivity.this, ShowAnimActivity.class)); }else { startActivity(new Intent(FindPJLoginActivity.this, MainTabActivity.class)); } FindPJLoginActivity.this.finish(); return; } } setContentView(R.layout.activity_login_v3); getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);// 隐藏软键盘 ViewUtils.inject(this); instance = this; logoImv = (ImageView) findViewById(R.id.login_logo_imv); // logoTextView = (TextView) findViewById(R.id.lognText); // logoTextView.setText(R.string.recruit_part_time); logoImv.setBackgroundResource(R.drawable.login_logo_c); // Button button = (Button) findViewById(R.id.look); // button.setVisibility(View.GONE); url = Url.COMPANY_LOGIN ; telephoneView = (EditText) findViewById(R.id.et_tel); passwordView = (EditText) findViewById(R.id.et_pwd); // 设置默认帐号、密码 String remember_tele = sp.getString(EXTRA_REMEMBER_TELE, ""); String remember_pwd = sp.getString(EXTRA_REMEMBER_PWD, ""); if (remember_tele != null && !"".equals(remember_tele) && remember_pwd != null && !"".equals(remember_pwd)) { telephoneView.setText(remember_tele); passwordView.setText(remember_pwd); } // 登陆 login = (Button) findViewById(R.id.btn_login); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { telephoneStr = telephoneView.getText().toString(); passwordStr = passwordView.getText().toString(); if (check()) { login.setClickable(false); if(BuildConfig.DEBUG){ login.setClickable(true); } login(); } } }); // 注册 regin = (Button) findViewById(R.id.btn_register); regin.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(FindPJLoginActivity.this, RegisterActivity.class); startActivityForResult(intent, 211); } }); // 忘记密码 forgetPwd = (TextView) findViewById(R.id.tv_forget_pwd); forgetPwd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(FindPJLoginActivity.this, // ForgetPwdActivity.class); com.parttime.login.ForgetPwdActivity.class); startActivity(intent); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 监控/拦截/屏蔽返回键 FindPJLoginActivity.this.finish(); return true; } else if (keyCode == KeyEvent.KEYCODE_MENU) { // 监控/拦截菜单键 } else if (keyCode == KeyEvent.KEYCODE_HOME) { // 由于Home键为系统键,此处不能捕获,需要重写onAttachedToWindow() } return super.onKeyDown(keyCode, event); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 211) { if (resultCode == RESULT_OK) { // FindPJLoginActivity.this.finish(); } } } private String token; private String user_id; private String IM_PASSWORD;// 环信登陆密码 private String IM_USERID;// 环信登陆账户 private String IM_AVATAR;// 环信头像 private String IM_NIKENAME;// 环信昵称 public void login() { showWait(true); StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { 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"); if(type == AccountType.AGENT){ showAnim = true; } // showAnim = true; checkForbidden(type); } else { login.setClickable(true); ResponseBaseCommonError error = new Gson().fromJson(response, ResponseBaseCommonError.class); if(error != null) { showToast(error.msg); } } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { showWait(false); showToast("请求服务器失败"); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map = new HashMap<>(); map.put("telephone", telephoneStr); map.put("password", JiaoyanUtil.MD5(passwordStr)); return map; } }; queue.add(request); request.setRetryPolicy(new DefaultRetryPolicy( ConstantForSaveList.DEFAULTRETRYTIME * 1000, 1, 1.0f)); } private void checkForbidden(final int type){ Map<String, String> params = new HashMap<>(); params.put("company_id", user_id); params.put("app_version", AndroidUtils.getVersionName(this)); params.put("phone_type", Build.MODEL); params.put("os_version", Build.VERSION.SDK_INT + ""); new BaseRequest().request(Url.COMPANY_FORBIDDEN, params, VolleySington.getInstance().getRequestQueue(), new Callback() { @Override public void success(Object obj) throws JSONException { showWait(false); JSONObject json = (JSONObject) obj; int zt = json.getInt("zt"); if(zt == 2){ Intent intent = new Intent(); SharePreferenceUtil spu = SharePreferenceUtil.getInstance(FindPJLoginActivity.this); spu.saveSharedPreferences("userId", ""); spu.saveSharedPreferences("token", ""); intent.setClass(FindPJLoginActivity.this, LaheiPageActivity.class); startActivity(intent); finish(); }else { SharePreferenceUtil.getInstance(FindPJLoginActivity.this).saveSharedPreferences(SharedPreferenceConstants.USER_TYPE, type); loginIM(IM_USERID, IM_PASSWORD); } } @Override public void failed(Object obj) { showWait(false); new ErrorHandler(FindPJLoginActivity.this, obj).showToast(); } }); } public boolean check() { if (!Util.isMobileNO(telephoneStr)) { showToast("请输入正确手机号码"); return false; } if (!Util.isEmpty(passwordStr)) { showToast("请输入密码"); return false; } return true; } /*// 随便看看 @OnClick(R.id.look) public void lookOnclick(View v) { Intent intent = new Intent(); intent.setClass(FindPJLoginActivity.this, MainTabActivity.class); startActivity(intent); FindPJLoginActivity.this.finish(); }*/ // 环信 登陆 private void loginIM(String userName, String passWord) { ApplicationControl.currentUserNick = "ydt01"; // 如果用户名密码都有,直接进入主页面 /* * 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( FindPJLoginActivity.this); pd.setCanceledOnTouchOutside(false); pd.setOnCancelListener(new 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(start); if (!progressShow) { return; } // 登陆成功,保存用户名密码 ApplicationControl.getInstance().setUserName( username); ApplicationControl.getInstance().setPassword( password); 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); } // 添加user"申请与通知" com.easemob.chatuidemo.domain.User newFriends = new com.easemob.chatuidemo.domain.User(); newFriends .setUsername(Constant.NEW_FRIENDS_USERNAME); newFriends.setNick(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(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(getString(R.string.public_count)); publicCount.setHeader(""); userlist.put(Constant.PUBLIC_COUNT, publicCount); // 存入内存 ApplicationControl.getInstance() .setContactList(userlist); // 存入db UserDao dao = new UserDao( FindPJLoginActivity.this); List<com.easemob.chatuidemo.domain.User> users = new ArrayList<>( userlist.values()); dao.saveContactList(users); // 获取群聊列表(群聊里只有groupid和groupname等简单信息,不包含members),sdk会把群组存入到内存和db中 EMGroupManager.getInstance() .getGroupsFromServer(); } catch (Exception e) { e.printStackTrace(); runOnUiThread(new Runnable() { public void run() { if (!FindPJLoginActivity.this .isFinishing()) pd.dismiss(); ApplicationControl.getInstance().logout( null); Toast.makeText(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 (!FindPJLoginActivity.this.isFinishing()) pd.dismiss(); // 进入主页面 SharedPreferences sp = getSharedPreferences( "jrdr.setting", MODE_PRIVATE); 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", telephoneStr); edit.putString("remember_pwd", passwordStr); edit.commit(); if(showAnim){ startActivity(new Intent(FindPJLoginActivity.this, ShowAnimActivity.class)); }else { Intent intent = new Intent(); intent.setClass(FindPJLoginActivity.this, MainTabActivity.class); startActivity(intent); finish(); } } @Override public void onProgress(int progress, String status) { } @Override public void onError(final int code, final String message) { loginFailure2Umeng(start, code, message); if (!progressShow) { return; } runOnUiThread(new Runnable() { public void run() { pd.dismiss(); showToast("登录失败"); } }); } }); } } /** * 设置hearder属性,方便通讯中对联系人按header分类显示,以及通过右侧ABCD...字母栏快速定位联系人 * * @param username String * @param user com.easemob.chatuidemo.domain.User */ 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 loginSuccess2Umeng(final long start) { 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(FindPJLoginActivity.this, "login1", params, (int) costTime); MobclickAgent.onEventDuration(FindPJLoginActivity.this, "login1", (int) costTime); } }); } private void loginFailure2Umeng(final long start, final int code, final String message) { runOnUiThread(new Runnable() { @SuppressWarnings("deprecation") 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(FindPJLoginActivity.this, "login1", params, (int) costTime); MobclickAgent.onEventDuration(FindPJLoginActivity.this, "login1", (int) costTime); } }); } }