Browse Source

登录模块分离完成!

SpringBoots 8 years ago
parent
commit
9683769afe

+ 0 - 354
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/im/helper/LoginHelper.java

@@ -1,354 +0,0 @@
-package com.xzjmyk.pm.activity.util.im.helper;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.alibaba.fastjson.JSON;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.common.system.SystemUtil;
-import com.core.app.AppConfig;
-import com.core.app.MyApplication;
-import com.core.model.LoginAuto;
-import com.core.model.LoginRegisterResult;
-import com.core.model.User;
-import com.core.net.volley.ObjectResult;
-import com.core.net.volley.Result;
-import com.core.net.volley.StringJsonObjectRequest;
-import com.core.utils.sp.UserSp;
-import com.core.dao.UserDao;
-import com.core.base.BaseActivity;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 当前登陆用户的帮助类
- * token
- * 
- */
-public class LoginHelper {
-	public static final String ACTION_LOGIN = AppConfig.sPackageName + ".action.login";// 登陆
-	public static final String ACTION_LOGOUT = AppConfig.sPackageName + ".action.logout";// 用户手动注销登出
-	public static final String ACTION_CONFLICT = AppConfig.sPackageName + ".action.conflict";// 登陆冲突(另外一个设备登陆了)
-	public static final String ACTION_TOKEN= AppConfig.sPackageName + ".action.token";// token异常
-	// 用户需要重新登陆,更新本地数据(可能是STATUS_USER_TOKEN_OVERDUE,STATUS_USER_NO_UPDATE,STATUS_USER_TOKEN_CHANGE三种状态之一)
-	public static final String ACTION_NEED_UPDATE = AppConfig.sPackageName + ".action.need_update";
-	public static final String ACTION_LOGIN_GIVE_UP = AppConfig.sPackageName + ".action.login_give_up";// 在下载资料的时候,没下载完就放弃登陆了
-	/* 信息完整程度由低到高,从第2级别开始,MyApplication中的mLoginUser是有值得 */
-	/* 没有用户,即游客(不需要进行其他操作) */
-	public static final int STATUS_NO_USER = 0;
-	/* 有用户,但是不完整,只有手机号,可能是之前注销过(不需要进行其他操作) */
-	public static final int STATUS_USER_SIMPLE_TELPHONE = 1;
-	/* 有用户,但是本地Token已经过期了(需要弹出对话框提示:本地Token已经过期,重新登陆) */
-	public static final int STATUS_USER_TOKEN_OVERDUE = 2;
-	/*
-	 * 有用户,本地Token未过期,但是可能信息不是最新的,即在上次登陆之后,没有更新完数据就退出了app (需要检测Token是否变更,变更即提示登陆,未变更则提示更新资料)
-	 */
-	public static final int STATUS_USER_NO_UPDATE = 3;
-	/*
-	 * 用户资料全部完整,但是Token已经变更了,提示重新登陆
-	 */
-	public static final int STATUS_USER_TOKEN_CHANGE = 4;
-	/*
-	 * 用户资料全部完整,但是还要检测Token是否变更 (需要检测Token是否变更,变更即提示登陆) 此状态比较特殊,因为有可能Token没有变更,不需要在进行登陆操作。<br/> 在检测Token接口调用失败的情况下,默认为一个不需要重新登陆的用户。
-	 * 在检测Token接口调用成功的情况下,此状态会立即过度到STATUS_USER_VALIDATION状态。
-	 */
-	public static final int STATUS_USER_FULL = 5;
-	/*
-	 * 用户资料全部完整,并且已经检测Token没有变更,或者新登录更新完成 (不需要进行其他操作)
-	 */
-	public static final int STATUS_USER_VALIDATION = 6;//
-
-	// 获取登陆和登出的action filter
-	public static IntentFilter getLogInOutActionFilter() {
-		IntentFilter intentFilter = new IntentFilter();
-		intentFilter.addAction(ACTION_LOGIN);
-		intentFilter.addAction(ACTION_LOGOUT);
-		intentFilter.addAction(ACTION_CONFLICT);
-		intentFilter.addAction(ACTION_NEED_UPDATE);
-		intentFilter.addAction(ACTION_LOGIN_GIVE_UP);
-		return intentFilter;
-	}
-
-	// 登陆广播,且登陆的用户为MyApplication.getInstance().mLoginUser
-	public static void broadcastLogin(Context context) {
-		Intent intent = new Intent(ACTION_LOGIN);
-		context.sendBroadcast(intent);
-	}
-
-	// 登出广播
-	public static void broadcastLogout(Context context) {
-		Intent intent = new Intent(ACTION_LOGOUT);
-		context.sendBroadcast(intent);
-	}
-
-	// 放弃登陆
-	public static void broadcastLoginGiveUp(Context context) {
-		Intent intent = new Intent(ACTION_LOGIN_GIVE_UP);
-		context.sendBroadcast(intent);
-	}
-
-	// 登陆冲突(另外一个设备登陆了)
-	public static void broadcastConflict(Context context) {
-		Intent intent = new Intent(ACTION_CONFLICT);
-		context.sendBroadcast(intent);
-	}
-	// 登陆冲突(另外一个设备登陆了)
-	public static void broadcastToken(Context context) {
-		Intent intent = new Intent(ACTION_TOKEN);
-		context.sendBroadcast(intent);
-	}
-	public static void broadcastNeedUpdate(Context context) {
-		Intent intent = new Intent(ACTION_NEED_UPDATE);
-		context.sendBroadcast(intent);
-	}
-
-	/* 进入MainActivity,判断当前是游客,还是之前已经登陆过的用户 */
-	public static int prepareUser(Context context) {
-		int userStatus = STATUS_NO_USER;
-		boolean idIsEmpty = TextUtils.isEmpty(UserSp.getInstance(context).getUserId(""));
-		boolean telephoneIsEmpty = TextUtils.isEmpty(UserSp.getInstance(context).getTelephone(null));
-
-		if (!idIsEmpty && !telephoneIsEmpty) {// 用户标识都不为空,那么就能代表一个完整的用户
-			// 进入之前,加载本地已经存在的数据
-			String userId = UserSp.getInstance(context).getUserId("");
-			User user = UserDao.getInstance().getUserByUserId(userId);
-
-			if (!LoginHelper.isUserValidation(user)) {// 用户数据错误,那么就认为是一个游客
-				userStatus = STATUS_NO_USER;
-			} else {
-				MyApplication.getInstance().mLoginUser = user;
-				MyApplication.getInstance().mAccessToken = UserSp.getInstance(context).getAccessToken(null);
-				MyApplication.getInstance().mExpiresIn = UserSp.getInstance(context).getExpiresIn(0);
-
-				if (LoginHelper.isTokenValidation()) {// Token未过期
-					boolean isUpdate = UserSp.getInstance(context).isUpdate(true);
-					if (isUpdate) {
-						Log.i("Arison", "prepareUser() returned: " + "userStatus:"+STATUS_USER_FULL);
-						userStatus = STATUS_USER_FULL;
-					} else {
-						Log.i("Arison", "prepareUser() returned: " + "userStatus:"+STATUS_USER_NO_UPDATE);
-						userStatus = STATUS_USER_NO_UPDATE;
-					}
-				} else {// Token过期
-					//STATUS_USER_TOKEN_OVERDUE
-					userStatus = STATUS_USER_TOKEN_OVERDUE;
-				}
-			}
-		} else if (!idIsEmpty) {// (适用于切换账号之后的操作)手机号不为空
-			userStatus = STATUS_USER_SIMPLE_TELPHONE;
-		} else {
-			userStatus = STATUS_NO_USER;
-		}
-		MyApplication.getInstance().mUserStatus = userStatus;
-		return userStatus;
-	}
-
-	// User数据是否能代表一个有效的用户
-	public static boolean isUserValidation(User user) {
-		if (user == null) {
-			return false;
-		}
-		if (TextUtils.isEmpty(user.getUserId())) {
-			return false;
-		}
-		if (TextUtils.isEmpty(user.getTelephone())) {
-			return false;
-		}
-		if (TextUtils.isEmpty(user.getPassword())) {
-			return false;
-		}
-		return !TextUtils.isEmpty(user.getNickName());
-	}
-
-	/**
-	 * AccessToken 是否是有效的
-	 * 
-	 * @return
-	 */
-	public static boolean isTokenValidation() {
-		if (TextUtils.isEmpty(MyApplication.getInstance().mAccessToken)) {
-			return false;
-		}
-		return MyApplication.getInstance().mExpiresIn >= System.currentTimeMillis();
-	}
-
-	/**
-	 * @desc:保存当前登录用户的信息
-	 * @author:Administrator on 2016/1/27 15:13
-	 */
-	public static boolean setLoginUser(Context context, String telephone, String password, ObjectResult<LoginRegisterResult> result) {
-		if (result == null) {
-			return false;
-		}
-		if (result.getResultCode() != Result.CODE_SUCCESS) {
-			return false;
-		}
-		if (result.getData() == null) {
-			return false;
-		}
-		// 保存当前登陆的用户信息和Token信息作为全局变量,方便调用
-		User user = MyApplication.getInstance().mLoginUser;
-		user.setTelephone(telephone);
-		user.setPassword(password);
-		user.setUserId(result.getData().getUserId());
-		user.setNickName(result.getData().getNickName());
-		// user.setCompanyId(result.getData().getCompanyId());
-		if (!LoginHelper.isUserValidation(user)) {// 请求下来的用户数据不完整有错误
-			return false;
-		}
-
-		MyApplication.getInstance().mAccessToken = result.getData().getAccess_token();
-		long expires_in = result.getData().getExpires_in() * 1000L + System.currentTimeMillis();
-		// long expires_in = 60 * 1000L + System.currentTimeMillis();// 测试 1分钟就过期的Token
-		MyApplication.getInstance().mExpiresIn = expires_in;
-
-		if (result.getData().getLogin() != null) {
-			user.setOfflineTime(result.getData().getLogin().getOfflineTime());
-		}
-
-		// 保存基本信息到数据库
-		boolean saveAble = UserDao.getInstance().saveUserLogin(user);
-		if (!saveAble) {
-			return false;
-		}
-
-		// 保存最后一次登录的用户信息到Sp,用于免登陆
-		UserSp.getInstance(MyApplication.getInstance()).setUserId(result.getData().getUserId());
-		UserSp.getInstance(MyApplication.getInstance()).setTelephone(telephone);
-		UserSp.getInstance(MyApplication.getInstance()).setAccessToken(result.getData().getAccess_token());
-		UserSp.getInstance(MyApplication.getInstance()).setExpiresIn(expires_in);
-		MyApplication.getInstance().mUserStatusChecked = true;
-		MyApplication.getInstance().mUserStatus = STATUS_USER_VALIDATION;
-
-		return true;
-	}
-
-	/**
-	 * 检测Status,是否要弹出更新用户状态的对话框
-	 *
-	 * @param activity
-	 *            是否弹出对话框有本方法内部逻辑决定。<br/>
-	 *            是否继续循环检测(检测未成功的情况下),<br/>
-	 *            由 MyApplication.getInstance().mUserStatusChecked值决定,( 因为方法内部有异步操作,不能直接返回值来判断) 在MainActivity中进行重复检测的判定
-	 */
-	public static void checkStatusForUpdate(final Activity activity, final OnCheckedFailedListener listener) {
-		if (MyApplication.getInstance().mUserStatusChecked) {
-			return;
-		}
-		final int status = MyApplication.getInstance().mUserStatus;
-		if (status == STATUS_NO_USER || status == STATUS_USER_SIMPLE_TELPHONE) {
-			MyApplication.getInstance().mUserStatusChecked = true;
-			return;
-		}
-
-		final User user = MyApplication.getInstance().mLoginUser;
-		if (!isUserValidation(user)) {// 如果是用户数据不完整,那么就可能是数据错误,将状态变为STATUS_NO_USER和STATUS_USER_SIMPLE_TELPHONE
-			boolean telephoneIsEmpty = TextUtils.isEmpty(UserSp.getInstance(activity).getTelephone(null));
-			if (telephoneIsEmpty) {
-				MyApplication.getInstance().mUserStatus = STATUS_NO_USER;
-			} else {
-				MyApplication.getInstance().mUserStatus = STATUS_USER_SIMPLE_TELPHONE;
-			}
-			return;
-		}
-        //6
-		if (status == STATUS_USER_VALIDATION) {
-			MyApplication.getInstance().mUserStatusChecked = true;
-			broadcastLogin(activity);
-			return;
-		}
-           //4
-		if (status == STATUS_USER_TOKEN_CHANGE) {// Token已经变更,直接提示,不需要再检测Token是否变更
-			MyApplication.getInstance().mUserStatusChecked = true;
-			broadcastNeedUpdate(activity);
-			return;
-		}
-
-		/**
-		 * 能往下执行的只有三种状态 <br/>
-		 * public static final int STATUS_USER_TOKEN_OVERDUE = 2;<br/>
-		 * public static final int STATUS_USER_NO_UPDATE = 3;<br/>
-		 * public static final int STATUS_USER_FULL = 5;<br/>
-		 */
-
-		Map<String, String> params = new HashMap<String, String>();
-		params.put("access_token", MyApplication.getInstance().mAccessToken);
-		params.put("userId", user.getUserId());
-		params.put("serial", SystemUtil.getDeviceId(activity));
-
-		// 地址信息
-		double latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
-		double longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
-		if (latitude != 0)
-			params.put("latitude", String.valueOf(latitude));
-		if (longitude != 0)
-			params.put("longitude", String.valueOf(longitude));
-
-		StringJsonObjectRequest<LoginAuto> request = new StringJsonObjectRequest<LoginAuto>(MyApplication.getInstance().getConfig().USER_LOGIN_AUTO,
-				new Response.ErrorListener() {
-
-					@Override
-					public void onErrorResponse(VolleyError arg0) {
-						if (listener != null) {
-							listener.onCheckFailed();
-						}
-					}
-				}, new StringJsonObjectRequest.Listener<LoginAuto>() {
-					@Override
-					public void onResponse(ObjectResult<LoginAuto> result) {
-						boolean success = Result.defaultParser(activity, result, false);
-						if (success && result.getData() != null) {
-							Log.i("Arison","设备登陆信息:"+ JSON.toJSONString(result));
-							MyApplication.getInstance().mUserStatusChecked = true;// 检测Token成功
-							int tokenExists = result.getData().getTokenExists();// 1=令牌存在、0=令牌不存在
-							int serialStatus = result.getData().getSerialStatus();// 1=没有设备号、2=设备号一致、3=设备号不一致
-							if (serialStatus == 2) {// 设备号一致,说明没有切换过设备
-								if (tokenExists == 1) {// Token也存在,说明不用登陆了
-									if (status == STATUS_USER_FULL) {// 本地数据完整,那么就免登陆使用
-										MyApplication.getInstance().mUserStatus = STATUS_USER_VALIDATION;
-									} else {
-										// do no thing 依然保持其他的状态
-									}
-								} else {// Token 不存在
-									if (status == STATUS_USER_FULL) {// 数据也完整,那么就是Token过期
-										MyApplication.getInstance().mUserStatus = STATUS_USER_TOKEN_OVERDUE;
-									} else {
-										// do no thing 依然保持其他的状态
-									}
-								}
-							} else {// 设备号不一致,那么就是切换过手机
-								MyApplication.getInstance().mUserStatus = STATUS_USER_TOKEN_CHANGE;
-
-								//TODO 可能存在异常提示账号在另一设备登陆情况
-
-							}
-
-							// 最后判断是否要跳转弹出对话框
-							if (MyApplication.getInstance().mUserStatus != STATUS_USER_VALIDATION) {
-								broadcastNeedUpdate(activity);
-							} else {// 如果是用户已经完整验证,那么发出用户登录的广播
-								broadcastLogin(activity);
-							}
-						} else {
-							if (listener != null) {
-								listener.onCheckFailed();
-							}
-						}
-					}
-				}, LoginAuto.class, params);
-		request.setTag("checkStatus");
-		((BaseActivity)activity).addDefaultRequest(request);
-	}
-   //方法结束
-	public interface OnCheckedFailedListener {// 检查Token失败才回调,然后外部在继续下一次检测
-
-		void onCheckFailed();
-	}
-
-}

+ 0 - 3
WeiChat/src/main/res/raw/versionconfiguration.properties

@@ -1,3 +0,0 @@
-#发布版本状态改为true,测试版本状态为false
-release_version=false
-#release_version=true

+ 3 - 0
app_modular/applogin/src/main/java/com/modular/login/LoginActivity.java

@@ -34,6 +34,9 @@ import com.core.utils.ToastUtil;
 import com.core.utils.helper.AvatarHelper;
 import com.core.utils.helper.LoginHelper;
 
+import org.apache.http.Header;
+import org.apache.http.client.HttpClient;
+
 import java.util.HashMap;
 
 

+ 1 - 1
gradle.properties

@@ -5,5 +5,5 @@ org.gradle.jvmargs=-Xmx5120m
 
 applicationId=com.xzjmyk.pm.activity
 
-# ¿ªÊ¼°æ±¾
+