UserManager.java 3.6 KB
package com.studymachine.www.manager;


import android.app.Application;
import android.content.Intent;

import com.hjq.http.EasyHttp;
import com.hjq.http.lifecycle.ApplicationLifecycle;
import com.hjq.http.listener.OnHttpListener;
import com.hjq.toast.ToastUtils;
import com.studymachine.www.event.UserInfoEvent;
import com.studymachine.www.http.api.UserInfoApi;
import com.studymachine.www.http.model.HttpData;
import com.studymachine.www.ui.activity.LoginActivity;
import com.studymachine.www.ui.activity.RegisterActivity;
import com.tencent.mmkv.MMKV;

import org.greenrobot.eventbus.EventBus;


/**
 * 用户管理
 */
public class UserManager {
    private static volatile UserManager userManager;

    private final static String TOKEN_TAG = "studyMachineToken";
    private final static String USER_INFO_TAG = "studyMachineUserInfo";

    private UserInfoApi.Bean userBean;

    private String token;


    /**
     * 注册使用的对象
     */
    private RegisterActivity.RegisterBody registerBody;

    private UserManager() {
        setToken(MMKV.defaultMMKV().decodeString(TOKEN_TAG, null));
        setUserBean(MMKV.defaultMMKV().decodeParcelable(USER_INFO_TAG, UserInfoApi.Bean.class));
    }

    public static UserManager getInstance() {
        if (userManager == null) {
            synchronized (UserManager.class) {
                if (userManager == null) {
                    userManager = new UserManager();
                }
            }
        }
        return userManager;
    }

    public void logOut() {
        setToken(null);
        setUserBean(null);
        Application application = ActivityManager.getInstance().getApplication();
        Intent intent = new Intent(application, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        application.startActivity(intent);
        // 销毁除了登录页之外的 Activity
        ActivityManager.getInstance().finishAllActivities(LoginActivity.class);
    }


    public void getUserInfo() {
        getUserInfo(null);
    }

    public void getUserInfo(OnHttpUserInfo callback) {
        EasyHttp.get(new ApplicationLifecycle())
                .api(new UserInfoApi())
                .request(new OnHttpListener<HttpData<UserInfoApi.Bean>>() {
                    @Override
                    public void onSucceed(HttpData<UserInfoApi.Bean> result) {
                        setUserBean(result.getData());
                        if (callback != null) {
                            callback.onSucceed();
                        }
                    }
                    @Override
                    public void onFail(Exception e) {
                        ToastUtils.show(e.getMessage());
                        if (callback != null) {
                            callback.onFail();
                        }
                    }
                });
    }

    public interface OnHttpUserInfo {
        void onSucceed();
        void onFail();
    }

    public UserInfoApi.Bean getUserBean() {
        return userBean;
    }

    public void setUserBean(UserInfoApi.Bean userBean) {
        this.userBean = userBean;
        MMKV.defaultMMKV().encode(USER_INFO_TAG, userBean);
        EventBus.getDefault().post(new UserInfoEvent());
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
        MMKV.defaultMMKV().encode(TOKEN_TAG, token);
    }

    public RegisterActivity.RegisterBody getRegisterBody() {
        return registerBody;
    }

    public void setRegisterBody(RegisterActivity.RegisterBody registerBody) {
        this.registerBody = registerBody;
    }
}