/**
* 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 :", "");
}
}