package com.yidianling.consultant.modular.singlton import android.app.Activity import android.support.v7.app.AppCompatActivity import com.ydl.ydlcommon.utils.YdlBuryPointUtil import com.yidianling.common.tools.ToastUtil import com.yidianling.consultant.dialog.ConsultAssistantDialog import com.yidianling.consultant.model.SearchApi import com.yidianling.consultant.router.ConsultantIn import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import java.util.* /** * Created by xj on 2019/11/14. */ class ConsultAssistantDialogUtils private constructor() { companion object { val INSTANCE by lazy { ConsultAssistantDialogUtils() } } var consultAssistantDialogFromHomePage: ConsultAssistantDialog? = null // 首页展示的dialog var consultAssistantFragmentDialog: ConsultAssistantDialog? = null //咨询师列表fragment页面展示的dialog var expertSearchPageHasShown: Boolean = false // 专家咨询列表fragment页面是否已经展示 var consultAssistantActivityDialog: ConsultAssistantDialog? = null //咨询师列表activity页面展示的dialog var expertSearchActivityPageHasShown: Boolean = false // 专家咨询列表activity页面是否已经展示 var timer: Timer? = null /** *判断是否符合代码展示逻辑 * origin 展示请求来源 首页 home_index 咨询列表 doctor_list * fromActivity 默认不是来自于咨询师列表activity */ fun fitRequest(activity: Activity, origin: String, fromActivity: Boolean = false) { when (origin) { "home_index" -> { if (ConsultantIn.isLogin() && ConsultantIn.getUserImpl().getUserInfo()?.user_type == 1 ) { shouldShowDialog(activity, origin) } } "doctor_list" -> { shouldShowDialog(activity, origin, fromActivity = fromActivity) } } } /** * 判断是否符合接口展示逻辑 */ private fun shouldShowDialog(activity: Activity, origin: String, isDelay: Boolean = false, fromActivity: Boolean = false) { // 请求接口判断导医咨询助理按钮是否展示 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) } } } } ////////////////////////////////////// 首页的展示隐藏逻辑 代码块start /////////////////////////////////////////////////// /** * 首页页展示 */ fun showFromYdlHome(activity: Activity) { if (!activity.isFinishing) { if (consultAssistantDialogFromHomePage == null) { consultAssistantDialogFromHomePage = ConsultAssistantDialog( activity, object : ConsultAssistantDialog.OnConsultAssistantClickListener { override fun onClickAction() { //获取用户uid YdlBuryPointUtil.sendClick("home_page_assistant_click") getConsultAssistantUid(activity) } }) } consultAssistantDialogFromHomePage?.show() } } /** * 首页隐藏 */ fun hideFromHomePage() { consultAssistantDialogFromHomePage?.hide() } ////////////////////////////////////// 首页的展示隐藏逻辑 代码块end /////////////////////////////////////////////////// ////////////////////////////////////// 咨询师列表页面的展示隐藏逻辑 代码块start /////////////////////////////////////////////////// /** * 咨询师列表页展示 */ 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) } } } /** * 咨询师列表页展示浮层 */ fun showDialog(activity: Activity, fromActivity: Boolean = false) { if (!fromActivity) { if (!activity.isFinishing) { if (consultAssistantFragmentDialog == null) { consultAssistantFragmentDialog = ConsultAssistantDialog( activity, object : ConsultAssistantDialog.OnConsultAssistantClickListener { override fun onClickAction() { YdlBuryPointUtil.sendClick("assistant_list_click") // 咨询师列表页面且未登录情况下,跳转登录页面 if (!ConsultantIn.isLogin()) { ConsultantIn.toLogin(activity) } else { //获取用户uid getConsultAssistantUid(activity) } } }) } consultAssistantFragmentDialog?.show() } }else { if (!activity.isFinishing) { if (consultAssistantActivityDialog == null) { consultAssistantActivityDialog = ConsultAssistantDialog( activity, object : ConsultAssistantDialog.OnConsultAssistantClickListener { override fun onClickAction() { YdlBuryPointUtil.sendClick("assistant_list_click") // 咨询师列表页面且未登录情况下,跳转登录页面 if (!ConsultantIn.isLogin()) { ConsultantIn.toLogin(activity) } else { //获取用户uid getConsultAssistantUid(activity) } } }) } consultAssistantActivityDialog?.show() } } } /** * 咨询师列表页隐藏 */ fun hide() { consultAssistantFragmentDialog?.hide() } /** * 释放本单例所有资源(咨询师列表fragmnet在MainActivity, * 且在MainActivity销毁的时候,会先执行咨询师列表fragmnet * 的ondeatroy,所以这边直接在该专家咨询列表碎片执行该方法) */ fun resetStatus() { consultAssistantDialogFromHomePage?.dismiss() consultAssistantFragmentDialog?.dismiss() consultAssistantActivityDialog?.dismiss() timer?.cancel() timer = null expertSearchPageHasShown = false expertSearchActivityPageHasShown = false consultAssistantDialogFromHomePage = null consultAssistantFragmentDialog = null consultAssistantActivityDialog = null } /** * 咨询师列表activity页面使用的重置本单例关于专家咨询列表页面得状态 */ fun expertSearchResetStatus() { consultAssistantActivityDialog?.dismiss() timer?.cancel() timer = null expertSearchActivityPageHasShown = false consultAssistantActivityDialog = null } ////////////////////////////////////// 咨询师列表页面的展示隐藏逻辑 代码块end /////////////////////////////////////////////////// private fun getConsultAssistantUid(activity: Activity) { // 请求接口获取咨询助理的uid SearchApi.getSearchApi().getConsultAssistantUidRequest() .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("咨询助理忙碌中,请稍后再试") } } } }