UserService.java 6.38 KB
package com.cnlive.gundam.user.auth;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Context;

import com.cnlive.gundam.R;
import com.cnlive.gundam.user.model.User;
import com.cnlive.libs.user.model.DataEntity;
import com.cnlive.libs.util.SharedPreferencesHelper;



/**
 * 用户管理类
 */
public class UserService {
   private final String KEY_DEFAULT_ACCOUNT = "defaultaccount";//用户默认账户
    private final String KEY_USER_DATA_USER_ID = "uid";        //用户uid
    private final String KEY_USER_DATA_NICKNAME = "nickname";  //用户昵称
    private final String KEY_USER_DATA_FACEURL = "faceurl";    //用户头像
    private final String KEY_USER_DATA_GENDER = "gender";      //用户性别
    private final String KEY_USER_DATA_MOBILE = "mobile";      //用户手机号
    private final String KEY_USER_DATA_EMAIL = "email";        //用户邮箱
    private final String KEY_USER_DATA_LOCATION = "location";  //用户地址
    private final String KEY_USER_TOKEN = "token";             //用户token
    private Context mContext;


    private SharedPreferencesHelper sharedPrefs;

    public static UserService mInstance;
    private AccountManager mAccountManager;
    private Account activeAccount;

    private UserService(Context context) {
        mContext = context;
        sharedPrefs = SharedPreferencesHelper.getInstance(context);
        mAccountManager = AccountManager.get(context);
        getDefaultAccount();
        //AppApplication.userID=getActiveAccountInfo().getUid();
    }

    public static synchronized UserService getInstance(Context context) {
        if (mInstance == null)
            mInstance = new UserService(context.getApplicationContext());
        return mInstance;
    }

    private boolean hasDefaultAccount() {
        return getDefaultAccount() != null;
    }

    private Account getDefaultAccount() {
        String accountName = sharedPrefs.getValue(KEY_DEFAULT_ACCOUNT);

        return activeAccount = findAccountByUsername(accountName);
    }

    private void setDefaultAccount(Account defaultAccount) {
        sharedPrefs.setValue(KEY_DEFAULT_ACCOUNT, defaultAccount.name);

        boolean foundAccount = false;
        Account[] accounts = mAccountManager.getAccounts();
        for (int i = 0; i < accounts.length && !foundAccount; i++) {
            if (accounts[i].name.equals(defaultAccount.name)) {
                foundAccount = true;
            }
        }

        if (!foundAccount) {
            // 默认账户被注销了?
        }
    }

    public User getActiveAccountInfo() {
        if (hasDefaultAccount())
            return getUserInfo(activeAccount);
        else
            return new User();
    }

    private Account setActiveAccount(String username, String password) {
        Account account = findAccountByUsername(username);
        if (account == null) {
            account = new Account(username, mContext.getString(R.string.ACCOUNT_TYPE));
            mAccountManager.addAccountExplicitly(account, password, null);
        }
        this.activeAccount = account;

        return account;
    }

    public boolean autoLogin(String username, String password, DataEntity user) {

        if (user == null) {
            return false;
        }
        Account account = setActiveAccount(username, password);
        setDefaultAccount(account);

        setUserInfo(account, user);

        return true;
    }

    public void updateNickName(String nickname){   //修改昵称
        mAccountManager.setUserData(activeAccount,KEY_USER_DATA_NICKNAME, nickname);
    }
    public void updateFaceUrl(String faceurl){  //修改头像
        mAccountManager.setUserData(activeAccount, KEY_USER_DATA_FACEURL, faceurl);
    }
    public void updateGender(String gender){  //修改性别
        mAccountManager.setUserData(activeAccount,KEY_USER_DATA_GENDER, gender);
    }

    public void updateEmail(String email){  //修改邮箱
        mAccountManager.setUserData(activeAccount,KEY_USER_DATA_EMAIL, email);
    }

    public void setActiveAccountInfo( DataEntity user) {//更新 保存用户信息
        setUserInfo(activeAccount, user);
    }

    public void setUserInfo(Account account, DataEntity user){//更新 保存用户信息
        mAccountManager.setUserData(account,KEY_USER_DATA_USER_ID, String.valueOf(user.getUid()));
        mAccountManager.setUserData(account,KEY_USER_DATA_NICKNAME, user.getNickName());
        mAccountManager.setUserData(account,KEY_USER_DATA_FACEURL, user.getFaceUrl());
        mAccountManager.setUserData(account,KEY_USER_DATA_GENDER, user.getGender());
        mAccountManager.setUserData(account,KEY_USER_DATA_MOBILE, user.getMobile());
        mAccountManager.setUserData(account,KEY_USER_DATA_EMAIL, user.getEmail());
        mAccountManager.setUserData(account,KEY_USER_DATA_LOCATION, user.getLocation());
        mAccountManager.setUserData(account,KEY_USER_TOKEN, user.getToken());
    }

    public User getUserInfo(Account account){//获取用户信息
        User user = new User();
        user.setUid(Integer.parseInt(mAccountManager.getUserData(account, KEY_USER_DATA_USER_ID)));
        user.setNickname(mAccountManager.getUserData(account, KEY_USER_DATA_NICKNAME));
        user.setFaceurl(mAccountManager.getUserData(account, KEY_USER_DATA_FACEURL));
        user.setGender(mAccountManager.getUserData(account, KEY_USER_DATA_GENDER));
        user.setMobile(mAccountManager.getUserData(account, KEY_USER_DATA_MOBILE));
        user.setEmail(mAccountManager.getUserData(account, KEY_USER_DATA_EMAIL));
        user.setLocation(mAccountManager.getUserData(account, KEY_USER_DATA_LOCATION));
        user.setToken(mAccountManager.getUserData(account,KEY_USER_TOKEN));
        return user;
    }

    private Account findAccountByUsername(String username) {
        if (username.length() > 0) {
            for (Account account : mAccountManager.getAccountsByType(mContext.getString(R.string.ACCOUNT_TYPE))) {
                if (account.name.equals(username)) {
                    return account;
                }
            }
        }
        //AppApplication.userID = 0;
        return null;
    }

    public void clearUser(){//清空用户信息/退出登录
        Account account = getDefaultAccount();
        if (account != null) {
            mAccountManager.removeAccount(account, null, null);
            sharedPrefs.remove(KEY_DEFAULT_ACCOUNT);
            activeAccount = null;
        }
    }
}