ConsultAssistantDialogUtils.kt 9.81 KB
Newer Older
1 2 3 4
package com.yidianling.consultant.modular.singlton

import android.app.Activity
import android.support.v7.app.AppCompatActivity
徐健 committed
5
import com.ydl.ydlcommon.utils.YdlBuryPointUtil
6 7 8 9
import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.dialog.ConsultAssistantDialog
import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.router.ConsultantIn
徐健 committed
10
import io.reactivex.Observable
11 12
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
徐健 committed
13
import java.util.*
14 15 16 17

/**
 * Created by xj on 2019/11/14.
 */
徐健 committed
18
class ConsultAssistantDialogUtils private constructor() {
19 20 21 22 23

    companion object {
        val INSTANCE by lazy { ConsultAssistantDialogUtils() }
    }

徐健 committed
24
    var consultAssistantDialogFromHomePage: ConsultAssistantDialog? = null // 首页展示的dialog
25 26 27 28
    var consultAssistantFragmentDialog: ConsultAssistantDialog? = null //咨询师列表fragment页面展示的dialog
    var expertSearchPageHasShown: Boolean = false // 专家咨询列表fragment页面是否已经展示
    var consultAssistantActivityDialog: ConsultAssistantDialog? = null //咨询师列表activity页面展示的dialog
    var expertSearchActivityPageHasShown: Boolean = false // 专家咨询列表activity页面是否已经展示
徐健 committed
29
    var timer: Timer? = null
30

徐健 committed
31 32 33 34

    /**
     *判断是否符合代码展示逻辑
     * origin 展示请求来源    首页 home_index 咨询列表 doctor_list
35
     * fromActivity 默认不是来自于咨询师列表activity
徐健 committed
36
     */
37
    fun fitRequest(activity: Activity, origin: String, fromActivity: Boolean = false) {
38 39 40
        when (origin) {
            "home_index" -> {
                if (ConsultantIn.isLogin() &&
41 42
                    ConsultantIn.getUserImpl().getUserInfo()?.user_type == 1
                ) {
43 44 45 46
                    shouldShowDialog(activity, origin)
                }
            }
            "doctor_list" -> {
徐健 committed
47
                if (!ConsultantIn.isLogin() || (ConsultantIn.getUserImpl().getUserInfo()?.user_type == 1 && ConsultantIn.isLogin())) {
48 49
                    shouldShowDialog(activity, origin, fromActivity = fromActivity)
                }
50
            }
徐健 committed
51
        }
52

徐健 committed
53 54 55 56 57
    }

    /**
     * 判断是否符合接口展示逻辑
     */
58
    private fun shouldShowDialog(activity: Activity, origin: String, isDelay: Boolean = false, fromActivity: Boolean = false) {
徐健 committed
59 60
        // 请求接口判断导医咨询助理按钮是否展示
        SearchApi.getSearchApi().getConsultAssistantRequest(origin)
61 62 63 64 65 66 67
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                if (it.data) {
                    if (origin == "home_index") {
                        showFromYdlHome(activity)
                    } else if (origin == "doctor_list") {
68
                        show(activity, fromActivity)
徐健 committed
69 70
                    }
                }
71
            }
徐健 committed
72 73
    }

徐健 committed
74 75 76 77 78 79
    //////////////////////////////////////  首页的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////

    /**
     * 首页页展示
     */
    fun showFromYdlHome(activity: Activity) {
徐健 committed
80 81 82 83 84 85 86
        if (!activity.isFinishing) {
            if (consultAssistantDialogFromHomePage == null) {
                consultAssistantDialogFromHomePage = ConsultAssistantDialog(
                        activity,
                        object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                            override fun onClickAction() {
                                //获取用户uid
徐健 committed
87
                                YdlBuryPointUtil.sendClick("home_page_assistant_click")
徐健 committed
88 89 90 91 92 93 94
                                getConsultAssistantUid(activity)
                            }

                        })
            }
            consultAssistantDialogFromHomePage?.show()
        }
徐健 committed
95 96 97 98 99 100
    }

    /**
     * 首页隐藏
     */
    fun hideFromHomePage() {
徐健 committed
101
        consultAssistantDialogFromHomePage?.hide()
徐健 committed
102 103 104 105 106
    }

    //////////////////////////////////////  首页的展示隐藏逻辑 代码块end  ///////////////////////////////////////////////////

    //////////////////////////////////////  咨询师列表页面的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////
徐健 committed
107
    /**
徐健 committed
108
     * 咨询师列表页展示
徐健 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
    fun show(activity: Activity, fromActivity: Boolean = false) {
        // 来自于fragment咨询师列表
        if (!fromActivity) {
            if (!expertSearchPageHasShown && timer == null) {
                timer = Timer()
                timer!!.schedule(object : TimerTask() {
                    override fun run() {
                        Observable.just(1).observeOn(AndroidSchedulers.mainThread())
                                .subscribe {
                                    expertSearchPageHasShown = true
                                    showDialog(activity)
                                }
                    }
                }, 5000)
            } else {
                showDialog(activity)
            }
        }else {// 来自于activity咨询师列表
            if (!expertSearchActivityPageHasShown && timer == null) {
                timer = Timer()
                timer!!.schedule(object : TimerTask() {
                    override fun run() {
                        Observable.just(1).observeOn(AndroidSchedulers.mainThread())
                                .subscribe {
                                    expertSearchActivityPageHasShown = true
                                    showDialog(activity, true)
                                }
                    }
                }, 5000)
            } else {
                showDialog(activity, true)
            }
徐健 committed
142 143 144 145
        }
    }

    /**
徐健 committed
146
     * 咨询师列表页展示浮层
徐健 committed
147
     */
148 149 150 151 152 153 154 155
    fun showDialog(activity: Activity, fromActivity: Boolean = false) {
        if (!fromActivity) {
            if (!activity.isFinishing) {
                if (consultAssistantFragmentDialog == null) {
                    consultAssistantFragmentDialog = ConsultAssistantDialog(
                            activity,
                            object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                                override fun onClickAction() {
徐健 committed
156
                                    YdlBuryPointUtil.sendClick("assistant_list_click")
157 158 159 160 161 162 163
                                    // 咨询师列表页面且未登录情况下,跳转登录页面
                                    if (!ConsultantIn.isLogin()) {
                                        ConsultantIn.toLogin(activity)
                                    } else {
                                        //获取用户uid
                                        getConsultAssistantUid(activity)
                                    }
徐健 committed
164 165
                                }

166 167 168 169 170 171 172 173 174 175 176
                            })
                }
                consultAssistantFragmentDialog?.show()
            }
        }else {
            if (!activity.isFinishing) {
                if (consultAssistantActivityDialog == null) {
                    consultAssistantActivityDialog = ConsultAssistantDialog(
                            activity,
                            object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                                override fun onClickAction() {
徐健 committed
177
                                    YdlBuryPointUtil.sendClick("assistant_list_click")
178 179 180 181 182 183 184 185 186 187 188 189
                                    // 咨询师列表页面且未登录情况下,跳转登录页面
                                    if (!ConsultantIn.isLogin()) {
                                        ConsultantIn.toLogin(activity)
                                    } else {
                                        //获取用户uid
                                        getConsultAssistantUid(activity)
                                    }
                                }

                            })
                }
                consultAssistantActivityDialog?.show()
徐健 committed
190 191
            }
        }
192 193
    }

徐健 committed
194 195

    /**
徐健 committed
196
     * 咨询师列表页隐藏
徐健 committed
197 198
     */
    fun hide() {
199
        consultAssistantFragmentDialog?.hide()
徐健 committed
200 201 202
    }

    /**
203 204 205
     * 释放本单例所有资源(咨询师列表fragmnet在MainActivity,
     * 且在MainActivity销毁的时候,会先执行咨询师列表fragmnet
     * 的ondeatroy,所以这边直接在该专家咨询列表碎片执行该方法)
徐健 committed
206 207
     */
    fun resetStatus() {
徐健 committed
208
        consultAssistantDialogFromHomePage?.dismiss()
209 210
        consultAssistantFragmentDialog?.dismiss()
        consultAssistantActivityDialog?.dismiss()
徐健 committed
211 212 213
        timer?.cancel()
        timer = null
        expertSearchPageHasShown = false
214
        expertSearchActivityPageHasShown = false
徐健 committed
215
        consultAssistantDialogFromHomePage = null
216 217 218 219 220 221 222 223 224 225 226 227 228
        consultAssistantFragmentDialog = null
        consultAssistantActivityDialog = null
    }

    /**
     * 咨询师列表activity页面使用的重置本单例关于专家咨询列表页面得状态
     */
    fun expertSearchResetStatus() {
        consultAssistantActivityDialog?.dismiss()
        timer?.cancel()
        timer = null
        expertSearchActivityPageHasShown = false
        consultAssistantActivityDialog = null
229 230
    }

徐健 committed
231 232
    //////////////////////////////////////  咨询师列表页面的展示隐藏逻辑 代码块end  ///////////////////////////////////////////////////

233
    private fun getConsultAssistantUid(activity: Activity) {
徐健 committed
234
        // 请求接口获取咨询助理的uid
235
        SearchApi.getSearchApi().getConsultAssistantUidRequest()
236 237 238 239 240 241 242
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                if (it.code == "200" && it.data != 0.toLong()) {
                    ConsultantIn.startP2PSession(activity as AppCompatActivity, it.data.toString())
                } else {
                    ToastUtil.toastShort("咨询助理忙碌中,请稍后再试")
243
                }
244
            }
245 246
    }
}