NimApplication.java 5.42 KB
Newer Older
konghaorui committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
package com.yidianling.im.config;

import android.app.Application;
import android.content.Context;

import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.auth.LoginInfo;
import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.ydl.ydlcommon.utils.SharedPreferencesEditor;
import com.yidianling.avchatkit.AVChatKit;
import com.yidianling.avchatkit.config.AVChatOptions;
import com.yidianling.avchatkit.model.ITeamDataProvider;
import com.yidianling.avchatkit.model.IUserInfoProvider;
import com.yidianling.im.R;
import com.yidianling.im.api.event.AccountChangeEvent;
import com.yidianling.im.config.constants.UserPreferences;
import com.yidianling.im.helper.ImObserversHelper;
import com.yidianling.im.helper.NIMInitManager;
import com.yidianling.im.preference.IMCache;
import com.yidianling.im.router.ImIn;
import com.yidianling.im.session.SessionHelper;
import com.yidianling.nimbase.api.UIKitOptions;
import com.yidianling.uikit.api.NimUIKit;
import com.yidianling.uikit.business.team.helper.TeamHelper;
import com.yidianling.uikit.business.uinfo.UserInfoHelper;
import com.yidianling.uikit.custom.config.YDLToolBarOptions;
konghaorui committed
28
import com.yidianling.user.api.bean.UserResponseBean;
konghaorui committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

import de.greenrobot.event.EventBus;


public class NimApplication {

    private NimApplication() {
    }

    private static class InstanceHolder {
        static NimApplication nimApplication = new NimApplication();
    }

    public static NimApplication getInstance() {
        return InstanceHolder.nimApplication;
    }

    public void initIm(Application app,Class activity) {
        IMCache.setContext(app);
        // 初始化云信SDK
        NIMClient.init(app, loginInfo(), NimSDKOptionConfig.getSDKOptions(app,activity));

        // 以下逻辑只在主进程初始化时执行
        if (NIMUtil.isMainProcess(app)) {
            // 初始化UIKit模块
            initUIKit(app);
            // 初始化消息提醒
            NIMClient.toggleNotification(UserPreferences.getNotificationToggle());
            // 云信sdk相关业务初始化
            NIMInitManager.getInstance().init(true);
            // 初始化音视频模块
            initAVChatKit(activity);
            //注册状态观察者
            ImObserversHelper.Companion.getInstance().registerObserver(true);
            // 初始化听筒模式
            initEarMode();
        }
    }



    // 如果已经存在用户登录信息,返回LoginInfo,否则返回null即可
    private LoginInfo loginInfo(){
konghaorui committed
72
        UserResponseBean loginBean = ImIn.INSTANCE.getUserResponse();
konghaorui committed
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
       if(loginBean != null) {
            IMCache.setAccount(loginBean.getUid());
       }
        return loginBean != null? new LoginInfo(loginBean.getUid(), loginBean.getHxpwd()) : null;

    }

    private void initUIKit(Application application) {
        // 初始化
        NimUIKit.init(application, buildUIKitOptions(application));

        // IM 会话窗口的定制初始化。
        SessionHelper.init();
    }

    private UIKitOptions buildUIKitOptions(Application application) {
        UIKitOptions options = new UIKitOptions();
        // 设置app图片/音频/日志等缓存目录
        options.appCacheDir = NimSDKOptionConfig.getAppCacheDir(application) + "/app";
        //options.buildNimUserCache = true;
        options.shouldHandleReceipt = true;
        options.toolBarOptions = new YDLToolBarOptions();
konghaorui committed
95 96
        options.messageLeftBackground = R.drawable.im_nim_message_item_left_selector;
        options.messageRightBackground = R.drawable.im_nim_message_item_right_selector;
konghaorui committed
97 98 99 100 101 102 103 104 105 106 107
        return options;
    }

    private void initAVChatKit(Class activity) {
        AVChatOptions avChatOptions = new AVChatOptions() {
            @Override
            public void logout(Context context) {
                EventBus.getDefault().post(new AccountChangeEvent(1));
            }
        };
        avChatOptions.entranceActivity = activity;
konghaorui committed
108
        avChatOptions.notificationIconRes = R.mipmap.im_ic_launcher;
konghaorui committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
        AVChatKit.init(avChatOptions);

        // 设置用户相关资料提供者
        AVChatKit.setUserInfoProvider(new IUserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return NimUIKit.getUserInfoProvider().getUserInfo(account);
            }

            @Override
            public String getUserDisplayName(String account) {
                return UserInfoHelper.getUserDisplayName(account);
            }
        });
        // 设置群组数据提供者
        AVChatKit.setTeamDataProvider(new ITeamDataProvider() {
            @Override
            public String getDisplayNameWithoutMe(String teamId, String account) {
                return TeamHelper.getDisplayNameWithoutMe(teamId, account);
            }

            @Override
            public String getTeamMemberDisplayName(String teamId, String account) {
                return TeamHelper.getTeamMemberDisplayName(teamId, account);
            }
        });
    }

    public static final String EAR_MODE_OPEN = "1";
    public static final String EAR_MODE_CLOSE = "2";
    public static final String EAR_MODE_KEY = "EarMode";
    private void initEarMode() {
        String earMode = SharedPreferencesEditor.getString(EAR_MODE_KEY);
        if (!EAR_MODE_OPEN.equals(earMode) && !EAR_MODE_CLOSE.equals(earMode)) {
            //设置默认听筒模式 关闭
            ImIn.INSTANCE.updateEarMode(false);
        }
    }

}