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

3
import android.annotation.SuppressLint
4
import android.app.Activity
YKai committed
5
import androidx.appcompat.app.AppCompatActivity
6 7 8
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydlcommon.data.PlatformDataManager
9
import com.ydl.ydlcommon.data.http.ThrowableConsumer
霍志良 committed
10
import com.ydl.ydlcommon.utils.ActivityManager
11
import com.ydl.ydlcommon.utils.LogUtil
12
import com.ydl.ydlcommon.utils.Utils
徐健 committed
13
import com.ydl.ydlcommon.utils.YdlBuryPointUtil
徐健 committed
14
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
15
import com.ydl.ydlnet.YDLHttpUtils.Companion.obtainApi
16
import com.yidianling.consultant.ConsultAssistantCenterActivity
17
import com.yidianling.consultant.ExpertSearchActivity
严久程 committed
18
import com.yidianling.consultant.constants.ConsultBIConstants
19 20 21
import com.yidianling.consultant.dialog.ConsultAssistantDialog
import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.router.ConsultantIn
22
import com.yidianling.home.api.event.HomeModuleTabEvent
23
import com.yidianling.user.api.listener.LoginCallBackListener
24
import de.greenrobot.event.EventBus
25
import io.reactivex.android.schedulers.AndroidSchedulers
26
import io.reactivex.functions.Consumer
27 28 29 30 31
import io.reactivex.schedulers.Schedulers

/**
 * Created by xj on 2019/11/14.
 */
徐健 committed
32
class ConsultAssistantDialogUtils private constructor() {
33 34 35

    companion object {
        val INSTANCE by lazy { ConsultAssistantDialogUtils() }
36 37
        var isSHowDesc = true
        var REALATION_EDUCATION = false//是否跳转亲子教育字段,接口加ffrom2="learning"
38 39
    }

徐健 committed
40
    var consultAssistantDialogFromHomePage: ConsultAssistantDialog? = null // 首页展示的dialog
严久程 committed
41
    var consultAssistantDialogFromMine: ConsultAssistantDialog? = null // 我的展示的dialog
42
    var consultAssistantFragmentDialog: ConsultAssistantDialog? = null //咨询师列表fragment页面展示的dialog
43

44
    var consultAssistantActivityDialog: ConsultAssistantDialog? = null //咨询师列表activity页面展示的dialog
45
    var expertSearchPageHasShown: Boolean = false // 专家咨询列表fragment页面是否已经展示
46
    var confideListDialog: ConsultAssistantDialog? = null //倾诉列表activity页面展示的dialog
47
    var expertSearchActivityPageHasShown: Boolean = false // 专家咨询列表activity页面是否已经展示
严久程 committed
48

49 50
    //    var ASSISTANT_DIALOG_SP_TAG = "assistant_dialog_sp_tag" // 是否展示左侧文本的缓存key
    var minWidth = 0 // 最小宽度
51

徐健 committed
52 53 54 55

    /**
     *判断是否符合代码展示逻辑
     * origin 展示请求来源    首页 home_index 咨询列表 doctor_list
56
     * fromActivity 默认不是来自于咨询师列表activity
徐健 committed
57
     */
58
    fun fitRequest(activity: Activity, origin: String, fromActivity: Boolean = false) {
59 60
        when (origin) {
            "home_index" -> {
61
                shouldShowDialog(activity, origin)
62 63
            }
            "doctor_list" -> {
64 65 66
                if (!ConsultantIn.isLogin() || (ConsultantIn.getUserImpl()
                        .getUserInfo()?.user_type == 1 && ConsultantIn.isLogin())
                ) {
67 68
                    shouldShowDialog(activity, origin, fromActivity = fromActivity)
                }
69
            }
严久程 committed
70 71 72 73 74 75 76
            "mine_index" -> {
                if (ConsultantIn.isLogin() &&
                    ConsultantIn.getUserImpl().getUserInfo()?.user_type == 1
                ) {
                    shouldShowDialog(activity, origin)
                }
            }
77 78 79
            "other_index" ->{
                shouldShowDialog(activity, origin)
            }
徐健 committed
80
        }
81

徐健 committed
82 83 84 85 86
    }

    /**
     * 判断是否符合接口展示逻辑
     */
严久程 committed
87
    @SuppressLint("CheckResult")
徐健 committed
88 89 90 91 92
    private fun shouldShowDialog(
        activity: Activity,
        origin: String,
        fromActivity: Boolean = false
    ) {
93 94 95 96 97
        if (!fromActivity){     // 不是咨询师二级列页的时候再所有的dialog dismiss
            consultAssistantDialogFromHomePage?.dismiss()
            consultAssistantFragmentDialog?.dismiss()
            consultAssistantDialogFromMine?.dismiss()
        }
98 99 100 101 102 103
        when (origin) {
            "home_index" -> {
                showFromYdlHome(activity)
            }
            "doctor_list" -> {
                show(activity, origin, fromActivity)
徐健 committed
104
            }
105 106 107 108
            "mine_index" -> {
                showFromMine(activity)
            }
        }
徐健 committed
109 110
    }

徐健 committed
111 112 113 114 115
    //////////////////////////////////////  首页的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////

    /**
     * 首页页展示
     */
116
    private fun showFromYdlHome(activity: Activity) {
徐健 committed
117 118 119
        if (!activity.isFinishing) {
            if (consultAssistantDialogFromHomePage == null) {
                consultAssistantDialogFromHomePage = ConsultAssistantDialog(
徐健 committed
120 121 122
                    activity,
                    object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                        override fun onClickAction() {
123
                            if (Utils.isFastClick()) {
124
                                return@onClickAction
125
                            }
126
                            if (ConsultantIn.getUserImpl().isLogin()){
127 128 129 130
                                //获取用户uid
                                ActionCountUtils.count("main_page|main_daoyi_entry_click")
                                YdlBuryPointUtil.sendClick("home_page_assistant_click")
                                getConsultAssistantUid("", activity, 1)
131 132 133 134 135 136 137 138 139 140 141
                            }else{
                                ConsultantIn.getUserImpl().loginByOneKeyLoginCallBack(activity,true,object :LoginCallBackListener{
                                    override fun loginSuccess() {
                                        //获取用户uid
                                        ActionCountUtils.count("main_page|main_daoyi_entry_click")
                                        YdlBuryPointUtil.sendClick("home_page_assistant_click")
                                        getConsultAssistantUid("", activity, 1)
                                    }
                                    override fun notLogin() {
                                    }
                                })
142
                            }
徐健 committed
143 144 145
                        }
                    })
            }
徐健 committed
146 147
            consultAssistantDialogFromHomePage?.show()
        }
徐健 committed
148 149 150 151 152 153
    }

    /**
     * 首页隐藏
     */
    fun hideFromHomePage() {
徐健 committed
154
        consultAssistantDialogFromHomePage?.hide()
徐健 committed
155 156 157 158
    }

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

159 160 161 162 163 164
    //////////////////////////////////////  倾诉列表页展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////
    /**
     * 倾诉列表页展示
     */
    fun showFromConfideListHome(activity: Activity) {
        if (!activity.isFinishing) {
165
            confideListDialog = ConsultAssistantDialog(
166 167 168 169
                activity,
                object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                    override fun onClickAction() {
                        if (Utils.isFastClick()) {
170
                            return@onClickAction
171
                        }
172 173
                        if (ConsultantIn.getUserImpl().isLogin()){
                            //获取用户uid
174
                            jumpToDyOrH5(activity)
175 176 177 178
                        }else{
                            ConsultantIn.getUserImpl().loginByOneKeyLoginCallBack(activity,true,object :LoginCallBackListener{
                                override fun loginSuccess() {
                                    //获取用户uid
179
                                    jumpToDyOrH5(activity)
180 181 182 183
                                }
                                override fun notLogin() {
                                }
                            })
184
                        }
185

186
                    }
187

188
                })
189 190 191
            confideListDialog?.show()
        }
    }
192 193 194 195 196 197 198 199 200 201 202 203 204
    /**
     * 倾诉列表页导医跳转,oppo vivo 跳转99元3小时活动
     * */
    private fun jumpToDyOrH5(activity: Activity) {
        val channelName = PlatformDataManager.getRam().getChannelName()
        if (channelName.contains("oppo") || channelName.contains("vivo")) {
            //oppo vivo
            NewH5Activity.start(activity, H5Params("https://m.ydl.com/zx/activity/lowPrice", null))
        } else {
            //去导医
            getConsultAssistantUid("", activity, 17)
        }
    }
205 206 207 208 209 210 211 212 213

    /**
     * 倾诉列表页隐藏
     */
    fun hideFromConfideListPage() {
        confideListDialog?.hide()
    }

    //////////////////////////////////////  倾诉列表页展示隐藏逻辑 代码块end  ///////////////////////////////////////////////////
严久程 committed
214 215 216 217 218 219 220 221 222 223 224 225 226

    //////////////////////////////////////  我的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////

    /**
     * 我的页展示
     */
    fun showFromMine(activity: Activity) {
        if (!activity.isFinishing) {
            if (consultAssistantDialogFromMine == null) {
                consultAssistantDialogFromMine = ConsultAssistantDialog(
                    activity,
                    object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                        override fun onClickAction() {
227
                            if (Utils.isFastClick()) {
228
                                return@onClickAction
229 230
                            }
                            getConsultAssistantUid("", activity, 4)
严久程 committed
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
                        }

                    })
            }
            consultAssistantDialogFromMine?.show()
        }
    }

    /**
     * 我的隐藏
     */
    fun hideFromMine() {
        consultAssistantDialogFromMine?.hide()
    }

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


徐健 committed
249
    //////////////////////////////////////  咨询师列表页面的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////
徐健 committed
250
    /**
徐健 committed
251
     * 咨询师列表页展示
徐健 committed
252
     */
253
    fun show(activity: Activity, origin: String, fromActivity: Boolean = false) {
254 255
        // 来自于fragment咨询师列表
        if (!fromActivity) {
徐健 committed
256 257
            if (!expertSearchPageHasShown) {
                expertSearchPageHasShown = true
258
                showDialog(origin, activity)
259
            } else {
260
                showDialog(origin, activity)
261
            }
徐健 committed
262 263 264
        } else {// 来自于activity咨询师列表
            if (!expertSearchActivityPageHasShown) {
                expertSearchActivityPageHasShown = true
265
                showDialog(origin, activity, true)
266
            } else {
267
                showDialog(origin, activity, true)
268
            }
徐健 committed
269 270 271 272
        }
    }

    /**
徐健 committed
273
     * 咨询师列表页展示浮层
徐健 committed
274
     */
275
    private fun showDialog(origin: String, activity: Activity, fromActivity: Boolean = false) {
276 277 278 279
        if (!fromActivity) {
            if (!activity.isFinishing) {
                if (consultAssistantFragmentDialog == null) {
                    consultAssistantFragmentDialog = ConsultAssistantDialog(
徐健 committed
280 281 282
                        activity,
                        object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                            override fun onClickAction() {
283
                                if (Utils.isFastClick()) {
284
                                    return@onClickAction
285
                                }
徐健 committed
286
                                ActionCountUtils.count("app_consult_list_page|app_consult_list_daoyi_entry_click")
徐健 committed
287
                                YdlBuryPointUtil.sendClick("assistant_list_click")
288 289

                                if (ConsultantIn.getUserImpl().isLogin()){
徐健 committed
290
                                    //获取用户uid
291
                                    getConsultAssistantUid(origin, activity, 6)
292 293 294 295 296 297 298 299 300
                                }else{
                                    ConsultantIn.getUserImpl().loginByOneKeyLoginCallBack(activity,true,object :LoginCallBackListener{
                                        override fun loginSuccess() {
                                            //获取用户uid
                                            getConsultAssistantUid(origin, activity, 6)
                                        }
                                        override fun notLogin() {
                                        }
                                    })
徐健 committed
301
                                }
徐健 committed
302
                            }
徐健 committed
303

徐健 committed
304 305
                        })
                }
306 307
                consultAssistantFragmentDialog?.show()
            }
徐健 committed
308
        } else {
309 310 311
            if (!activity.isFinishing) {
                if (consultAssistantActivityDialog == null) {
                    consultAssistantActivityDialog = ConsultAssistantDialog(
徐健 committed
312 313 314
                        activity,
                        object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                            override fun onClickAction() {
315
                                if (Utils.isFastClick()) {
316
                                    return@onClickAction
317
                                }
徐健 committed
318
                                ActionCountUtils.count("app_consult_list_page|app_consult_list_daoyi_entry_click")
徐健 committed
319 320
                                YdlBuryPointUtil.sendClick("assistant_list_click")
                                // 咨询师列表页面且未登录情况下,跳转登录页面
321
                                if (ConsultantIn.loginByOneKeyLogin(activity, true)) {
徐健 committed
322
                                    //获取用户uid
323
                                    getConsultAssistantUid(origin, activity, 6)
324
                                }
徐健 committed
325
                            }
326

徐健 committed
327 328
                        })
                }
329
                consultAssistantActivityDialog?.show()
徐健 committed
330 331
            }
        }
332 333
    }

徐健 committed
334 335

    /**
336
     * 咨询师列表页Fragment隐藏
徐健 committed
337 338
     */
    fun hide() {
ydl committed
339
        consultAssistantFragmentDialog?.dismiss()
徐健 committed
340 341
    }

342 343 344 345
    /**
     * 咨询师列表页Fragment隐藏
     */
    fun hideAssistantActivity() {
ydl committed
346
        consultAssistantActivityDialog?.dismiss()
347 348
    }

徐健 committed
349
    /**
350 351 352
     * 释放本单例所有资源(咨询师列表fragmnet在MainActivity,
     * 且在MainActivity销毁的时候,会先执行咨询师列表fragmnet
     * 的ondeatroy,所以这边直接在该专家咨询列表碎片执行该方法)
徐健 committed
353 354
     */
    fun resetStatus() {
徐健 committed
355
        consultAssistantDialogFromHomePage?.dismiss()
严久程 committed
356
        consultAssistantDialogFromMine?.dismiss()
357 358
        consultAssistantFragmentDialog?.dismiss()
        consultAssistantActivityDialog?.dismiss()
徐健 committed
359

徐健 committed
360
        expertSearchPageHasShown = false
361
        expertSearchActivityPageHasShown = false
徐健 committed
362
        consultAssistantDialogFromHomePage = null
严久程 committed
363
        consultAssistantDialogFromMine = null
364 365 366 367 368 369 370 371
        consultAssistantFragmentDialog = null
        consultAssistantActivityDialog = null
    }

    /**
     * 咨询师列表activity页面使用的重置本单例关于专家咨询列表页面得状态
     */
    fun expertSearchResetStatus() {
372
        //页面关闭后重置亲子列表状态
373
        REALATION_EDUCATION = false
374
        consultAssistantActivityDialog?.dismiss()
徐健 committed
375

376 377
        expertSearchActivityPageHasShown = false
        consultAssistantActivityDialog = null
378 379
    }

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

382
    @SuppressLint("CheckResult")
383 384
    fun getConsultAssistantUid(origin: String, activity: Activity, location: Int) {
        if (origin == "doctor_list") {
385
            // 请求接口获取咨询助理的uid
386 387 388 389
            if (REALATION_EDUCATION) {
                getConsultAssistantUid(location, activity, "learning")
            } else {
                getConsultAssistantUid(location, activity, null)
390 391
            }

392
        } else {
393
            // 请求接口获取咨询助理的uid
394
            getConsultAssistantUid(location, activity, null)
395
        }
396 397 398 399
        ActionCountUtils.count(
            ConsultBIConstants.POSITION_DAOYI_ADVERTISEMENT_CLICK,
            location.toString()
        )
400 401 402 403

    }

    @SuppressLint("CheckResult")
404 405
    private fun getConsultAssistantUid(location: Int, activity: Activity, ffrom: String?) {
        obtainApi(SearchApi::class.java).getChatRouteConfig(location)
406 407
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
严久程 committed
408
            .subscribe(Consumer {
409 410

                if (it.data == 100L && (location <= 17)) {
411
                    //跳转咨询tab栏目
412 413
                    if (location == 1 || location == 4 || location == 6 || location == 3) {
                        if (activity is ExpertSearchActivity && !activity.isFinishing) {
414 415 416
                            activity.finish()
                        }
                        EventBus.getDefault().post(HomeModuleTabEvent(2))
417 418 419 420
                    } else {
                        if (activity.componentName.toString()
                                .contains("CourseListContainerActivity")
                        ) {
霍志良 committed
421 422
                            ActivityManager.getInstance()
                                .getSecondTaskActivity()?.finish()
423
                            activity.finish()
424
                        } else {
425
                            if (!activity.isFinishing) {
霍志良 committed
426 427
                                activity.finish()
                            }
428 429 430
                        }
                        EventBus.getDefault().post(HomeModuleTabEvent(2))
                    }
431 432 433 434 435 436 437
                } else if (it.data == 0L) {
                    //去前置信息收集页
                    ConsultantIn.startP2PSession(
                        activity as AppCompatActivity,
                        location,
                        ffrom
                    )
438
                }
439
                if (activity is ConsultAssistantCenterActivity && !activity.isFinishing) activity.finish()
严久程 committed
440
            }, object : ThrowableConsumer() {
441
                override fun accept(msg: String) {
442
                    if (activity is ConsultAssistantCenterActivity && !activity.isFinishing) activity.finish()
443
                }
444
            }
严久程 committed
445
            )
446
    }
徐健 committed
447 448 449

    // 判定是否展示左侧的描述文本
    fun canShowDesc(): Boolean {
严久程 committed
450 451 452 453 454 455 456 457 458 459 460
//        if (TextUtils.isEmpty(SharedPreferencesEditor.getString(ASSISTANT_DIALOG_SP_TAG))) {
//            //如果没有缓存,则展示
//            return true
//        } else if (System.currentTimeMillis() - SharedPreferencesEditor.getString(
//                ASSISTANT_DIALOG_SP_TAG
//            ).toLong() > 24 * 60 * 60 * 1000
//        ) {
//            //如果缓存时间超过一天,则展示
//            return true
//        }
        return isSHowDesc
徐健 committed
461 462 463 464
    }

    fun setDescHide() {
        consultAssistantDialogFromHomePage?.setDescHide()
严久程 committed
465
        consultAssistantDialogFromMine?.setDescHide()
徐健 committed
466 467 468
        consultAssistantActivityDialog?.setDescHide()
        consultAssistantFragmentDialog?.setDescHide()
    }
469
}