/** * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.easemob.chatuidemo.activity; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.easemob.EMCallBack; import com.easemob.chat.EMChatManager; 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.chatuidemo.domain.User; import com.easemob.chatuidemo.utils.CommonUtils; import com.sxit.dreamiya.R; import com.sxit.dreamiya.db.DBHelper; import com.sxit.dreamiya.entity.user.UserInfo; import com.sxit.dreamiya.utils.SOAP_UTILS; import com.sxit.dreamiya.webservice.SoapRes; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.Toast; /** * 登陆页面 * */ public class LoginActivity extends BaseActivity { private static final String TAG = "LoginActivity"; public static final int REQUEST_CODE_SETNICK = 1; private EditText usernameEditText; private EditText passwordEditText; private boolean progressShow; private boolean autoLogin = false; private String currentUsername; private String currentPassword; private DBHelper dbh; Context context; ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 如果用户名密码都有,直接进入主页面 if (DemoHXSDKHelper.getInstance().isLogined()) { autoLogin = true; startActivity(new Intent(LoginActivity.this, MainActivity.class)); return; } setContentView(R.layout.activity_login); context = this; dbh = new DBHelper(this); usernameEditText = (EditText) findViewById(R.id.username); passwordEditText = (EditText) findViewById(R.id.password); // 如果用户名改变,清空密码 usernameEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { passwordEditText.setText(null); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); if (DemoApplication.getInstance().getUserName() != null) { usernameEditText.setText(DemoApplication.getInstance().getUserName()); } } /** * 登录 * * @param view */ public void login(View view) { if (!CommonUtils.isNetWorkConnected(this)) { Toast.makeText(this, R.string.network_isnot_available, Toast.LENGTH_SHORT).show(); return; } currentUsername = usernameEditText.getText().toString().trim(); currentPassword = passwordEditText.getText().toString().trim(); if (TextUtils.isEmpty(currentUsername)) { Toast.makeText(this, R.string.User_name_cannot_be_empty, Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(currentPassword)) { Toast.makeText(this, R.string.Password_cannot_be_empty, Toast.LENGTH_SHORT).show(); return; } progressShow = true; pd = new ProgressDialog(LoginActivity.this); pd.setCanceledOnTouchOutside(false); pd.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { progressShow = false; } }); pd.setMessage(getString(R.string.Is_landing)); pd.show(); final long start = System.currentTimeMillis(); // 调用sdk登陆方法登陆聊天服务器 EMChatManager.getInstance().login(currentUsername, currentPassword, new EMCallBack() { @Override public void onSuccess() { if (!progressShow) { return; } Object[] property_va = { currentUsername, currentPassword }; soapService.userLogin(property_va); } @Override public void onProgress(int progress, String status) { } @Override public void onError(final int code, final String message) { if (!progressShow) { return; } runOnUiThread(new Runnable() { public void run() { pd.dismiss(); // Toast.makeText(getApplicationContext(), getString(R.string.Login_failed) + message, // Toast.LENGTH_SHORT).show(); Toast.makeText(context, "用户名或密码错误", Toast.LENGTH_SHORT).show(); } }); } }); } private void initializeContacts() { Map<String, User> userlist = new HashMap<String, User>(); // 添加user"申请与通知" User newFriends = new User(); newFriends.setUsername(Constant.NEW_FRIENDS_USERNAME); String strChat = getResources().getString( R.string.Application_and_notify); newFriends.setNick(strChat); userlist.put(Constant.NEW_FRIENDS_USERNAME, newFriends); // 添加"群聊" User groupUser = new User(); String strGroup = getResources().getString(R.string.group_chat); groupUser.setUsername(Constant.GROUP_USERNAME); groupUser.setNick(strGroup); groupUser.setHeader(""); userlist.put(Constant.GROUP_USERNAME, groupUser); // 添加"Robot" User robotUser = new User(); String strRobot = getResources().getString(R.string.robot_chat); robotUser.setUsername(Constant.CHAT_ROBOT); robotUser.setNick(strRobot); robotUser.setHeader(""); userlist.put(Constant.CHAT_ROBOT, robotUser); // 存入内存 DemoApplication.getInstance().setContactList(userlist); // 存入db UserDao dao = new UserDao(LoginActivity.this); List<User> users = new ArrayList<User>(userlist.values()); dao.saveContactList(users); } /** * 注册 * * @param view */ // public void register(View view) { // startActivityForResult(new Intent(this, RegisterActivity.class), 0); // } @Override protected void onResume() { super.onResume(); if (autoLogin) { return; } } @Override public void onEvent(Object obj) { super.onEvent(obj); SoapRes res = (SoapRes) obj; if (res.getCode().equals(SOAP_UTILS.METHOD.NEWLOGIN)) { List<UserInfo> list = (ArrayList<UserInfo>)res.getObj(); if(list != null){ if(!list.get(0).getUserId().equals("0")){ SplashActivity.userinfo = list.get(0); dbh.clearAllUserInfo(); for (int i = 0; i < list.size(); i++) { list.get(i).setPhone(currentUsername); dbh.insUserInfo(list.get(i)); } // 登陆成功,环信保存用户名密码 DemoApplication.getInstance().setUserName(currentUsername); DemoApplication.getInstance().setPassword(currentPassword); try { // ** 第一次登录或者之前logout后再登录,加载所有本地群和回话 // ** manually load all local groups and EMGroupManager.getInstance().loadAllGroups(); EMChatManager.getInstance().loadAllConversations(); // 处理好友和群组 initializeContacts(); } catch (Exception e) { e.printStackTrace(); // 取好友或者群聊失败,不让进入主页面 runOnUiThread(new Runnable() { public void run() { pd.dismiss(); DemoApplication.getInstance().logout(null); // Toast.makeText(getApplicationContext(), R.string.login_failure_failed, 1).show(); Toast.makeText(context, "用户名或密码错误", Toast.LENGTH_SHORT).show(); } }); return; } // 更新当前用户的nickname 此方法的作用是在ios离线推送时能够显示用户nick boolean updatenick = EMChatManager.getInstance().updateCurrentUserNick( DemoApplication.currentUserNick.trim()); if (!updatenick) { Log.e("LoginActivity", "update current user nick fail"); } if (!LoginActivity.this.isFinishing() && pd.isShowing()) { pd.dismiss(); } // 进入主页面 Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); finish(); } else { Toast.makeText(context, "用户名或密码错误", Toast.LENGTH_SHORT).show(); } } Log.d("Login Soap res to LoginActivity: ", res.toString()); } } @Override public void onEventMainThread(String method) { // TODO Auto-generated method stub super.onEventMainThread(method); Log.d("onEventMainThread :", ""); } }