ConsultAssistantDialogUtils.kt 10.7 KB
Newer Older
1 2
package com.yidianling.consultant.modular.singlton

3
import android.annotation.SuppressLint
4
import android.app.Activity
徐健 committed
5
import android.content.SharedPreferences
6
import android.support.v7.app.AppCompatActivity
徐健 committed
7
import android.text.TextUtils
8
import com.ydl.ydlcommon.data.http.ThrowableConsumer
徐健 committed
9
import com.ydl.ydlcommon.utils.SharedPreferencesEditor
徐健 committed
10
import com.ydl.ydlcommon.utils.YdlBuryPointUtil
11
import com.ydl.ydlcommon.utils.remind.ToastHelper
12
import com.yidianling.common.tools.ToastUtil
13
import com.yidianling.consultant.ConsultAssistantCenterActivity
14 15 16
import com.yidianling.consultant.dialog.ConsultAssistantDialog
import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.router.ConsultantIn
徐健 committed
17
import io.reactivex.Observable
18
import io.reactivex.android.schedulers.AndroidSchedulers
19
import io.reactivex.functions.Consumer
20
import io.reactivex.schedulers.Schedulers
徐健 committed
21
import java.util.*
22 23 24 25

/**
 * Created by xj on 2019/11/14.
 */
徐健 committed
26
class ConsultAssistantDialogUtils private constructor() {
27 28 29 30 31

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

徐健 committed
32
    var consultAssistantDialogFromHomePage: ConsultAssistantDialog? = null // 首页展示的dialog
33 34 35 36
    var consultAssistantFragmentDialog: ConsultAssistantDialog? = null //咨询师列表fragment页面展示的dialog
    var expertSearchPageHasShown: Boolean = false // 专家咨询列表fragment页面是否已经展示
    var consultAssistantActivityDialog: ConsultAssistantDialog? = null //咨询师列表activity页面展示的dialog
    var expertSearchActivityPageHasShown: Boolean = false // 专家咨询列表activity页面是否已经展示
徐健 committed
37
    var ASSISTANT_DIALOG_SP_TAG = "assistant_dialog_sp_tag" // 是否展示左侧文本的缓存key
38
    var minWidth = 0 // 最小宽度
39

徐健 committed
40 41 42 43

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

徐健 committed
62 63 64 65 66
    }

    /**
     * 判断是否符合接口展示逻辑
     */
徐健 committed
67 68 69 70 71 72
    private fun shouldShowDialog(
        activity: Activity,
        origin: String,
        fromActivity: Boolean = false
    ) {

徐健 committed
73 74 75 76 77
//        if (origin == "home_index") {
//            showFromYdlHome(activity)
//        } else if (origin == "doctor_list") {
//            show(activity, fromActivity)
//        }
徐健 committed
78

徐健 committed
79
        // 请求接口判断导医咨询助理按钮是否展示
徐健 committed
80 81 82 83 84 85 86 87 88 89 90 91
        SearchApi.getSearchApi().getConsultAssistantRequest(origin)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                if (it.data) {
                    if (origin == "home_index") {
                        showFromYdlHome(activity)
                    } else if (origin == "doctor_list") {
                        show(activity, fromActivity)
                    }
                }
            }
徐健 committed
92 93
    }

徐健 committed
94 95 96 97 98 99
    //////////////////////////////////////  首页的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////

    /**
     * 首页页展示
     */
    fun showFromYdlHome(activity: Activity) {
徐健 committed
100 101 102
        if (!activity.isFinishing) {
            if (consultAssistantDialogFromHomePage == null) {
                consultAssistantDialogFromHomePage = ConsultAssistantDialog(
徐健 committed
103 104 105 106 107 108 109
                    activity,
                    object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                        override fun onClickAction() {
                            //获取用户uid
                            YdlBuryPointUtil.sendClick("home_page_assistant_click")
                            getConsultAssistantUid(activity)
                        }
徐健 committed
110

徐健 committed
111 112
                    })
            }
徐健 committed
113 114
            consultAssistantDialogFromHomePage?.show()
        }
徐健 committed
115 116 117 118 119 120
    }

    /**
     * 首页隐藏
     */
    fun hideFromHomePage() {
徐健 committed
121
        consultAssistantDialogFromHomePage?.hide()
徐健 committed
122 123 124 125 126
    }

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

    //////////////////////////////////////  咨询师列表页面的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////
徐健 committed
127
    /**
徐健 committed
128
     * 咨询师列表页展示
徐健 committed
129
     */
130 131 132
    fun show(activity: Activity, fromActivity: Boolean = false) {
        // 来自于fragment咨询师列表
        if (!fromActivity) {
徐健 committed
133 134 135
            if (!expertSearchPageHasShown) {
                expertSearchPageHasShown = true
                showDialog(activity)
136 137 138
            } else {
                showDialog(activity)
            }
徐健 committed
139 140 141 142
        } else {// 来自于activity咨询师列表
            if (!expertSearchActivityPageHasShown) {
                expertSearchActivityPageHasShown = true
                showDialog(activity, true)
143 144 145
            } else {
                showDialog(activity, true)
            }
徐健 committed
146 147 148 149
        }
    }

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

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

徐健 committed
191 192
                        })
                }
193
                consultAssistantActivityDialog?.show()
徐健 committed
194 195
            }
        }
196 197
    }

徐健 committed
198 199

    /**
200
     * 咨询师列表页Fragment隐藏
徐健 committed
201 202
     */
    fun hide() {
203
        consultAssistantFragmentDialog?.hide()
徐健 committed
204 205
    }

206 207 208 209 210 211 212
    /**
     * 咨询师列表页Fragment隐藏
     */
    fun hideAssistantActivity() {
        consultAssistantActivityDialog?.hide()
    }

徐健 committed
213
    /**
214 215 216
     * 释放本单例所有资源(咨询师列表fragmnet在MainActivity,
     * 且在MainActivity销毁的时候,会先执行咨询师列表fragmnet
     * 的ondeatroy,所以这边直接在该专家咨询列表碎片执行该方法)
徐健 committed
217 218
     */
    fun resetStatus() {
徐健 committed
219
        consultAssistantDialogFromHomePage?.dismiss()
220 221
        consultAssistantFragmentDialog?.dismiss()
        consultAssistantActivityDialog?.dismiss()
徐健 committed
222

徐健 committed
223
        expertSearchPageHasShown = false
224
        expertSearchActivityPageHasShown = false
徐健 committed
225
        consultAssistantDialogFromHomePage = null
226 227 228 229 230 231 232 233 234
        consultAssistantFragmentDialog = null
        consultAssistantActivityDialog = null
    }

    /**
     * 咨询师列表activity页面使用的重置本单例关于专家咨询列表页面得状态
     */
    fun expertSearchResetStatus() {
        consultAssistantActivityDialog?.dismiss()
徐健 committed
235

236 237
        expertSearchActivityPageHasShown = false
        consultAssistantActivityDialog = null
238 239
    }

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

242 243
    @SuppressLint("CheckResult")
    fun getConsultAssistantUid(activity: Activity) {
徐健 committed
244
        // 请求接口获取咨询助理的uid
245
        SearchApi.getSearchApi().getConsultAssistantUidRequest()
246 247
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
248 249
            .subscribe( Consumer {
                if (it.code == "200" && it.data != 0.toLong() && null != activity) {
250 251 252
                    ConsultantIn.startP2PSession(activity as AppCompatActivity, it.data.toString())
                } else {
                    ToastUtil.toastShort("咨询助理忙碌中,请稍后再试")
253
                }
254 255 256 257 258
                if (null != activity && activity is ConsultAssistantCenterActivity && !activity.isFinishing) activity.finish()
            }, object: ThrowableConsumer() {
                override fun accept(msg: String) {
                    if (null != activity && activity is ConsultAssistantCenterActivity && !activity.isFinishing) activity.finish()
                }
259
            }
260
        )
261
    }
徐健 committed
262 263 264 265 266 267

    // 判定是否展示左侧的描述文本
    fun canShowDesc(): Boolean {
        if (TextUtils.isEmpty(SharedPreferencesEditor.getString(ASSISTANT_DIALOG_SP_TAG))) {
            //如果没有缓存,则展示
            return true
徐健 committed
268
        }else if (System.currentTimeMillis() - SharedPreferencesEditor.getString(ASSISTANT_DIALOG_SP_TAG).toLong() > 24 * 60 * 60 * 1000) {
徐健 committed
269 270 271 272 273 274 275 276 277 278 279
            //如果缓存时间超过一天,则展示
            return true
        }
        return false
    }

    fun setDescHide() {
        consultAssistantDialogFromHomePage?.setDescHide()
        consultAssistantActivityDialog?.setDescHide()
        consultAssistantFragmentDialog?.setDescHide()
    }
280
}