ConsultAssistantDialogUtils.kt 18.8 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 43 44
    var consultAssistantFragmentDialog: ConsultAssistantDialog? = null //咨询师列表fragment页面展示的dialog
    var expertSearchPageHasShown: Boolean = false // 专家咨询列表fragment页面是否已经展示
    var consultAssistantActivityDialog: ConsultAssistantDialog? = null //咨询师列表activity页面展示的dialog
45
    var confideListDialog: ConsultAssistantDialog? = null //倾诉列表activity页面展示的dialog
46
    var expertSearchActivityPageHasShown: Boolean = false // 专家咨询列表activity页面是否已经展示
严久程 committed
47

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

徐健 committed
51 52 53 54

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

徐健 committed
78 79 80 81 82
    }

    /**
     * 判断是否符合接口展示逻辑
     */
严久程 committed
83
    @SuppressLint("CheckResult")
徐健 committed
84 85 86 87 88 89
    private fun shouldShowDialog(
        activity: Activity,
        origin: String,
        fromActivity: Boolean = false
    ) {

徐健 committed
90
        // 请求接口判断导医咨询助理按钮是否展示
徐健 committed
91 92 93 94 95 96 97 98
        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") {
99
                        show(activity, origin, fromActivity)
严久程 committed
100 101
                    } else if (origin == "mine_index") {
                        showFromMine(activity)
徐健 committed
102 103 104
                    }
                }
            }
徐健 committed
105 106
    }

徐健 committed
107 108 109 110 111 112
    //////////////////////////////////////  首页的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////

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

    /**
     * 首页隐藏
     */
    fun hideFromHomePage() {
徐健 committed
150
        consultAssistantDialogFromHomePage?.hide()
徐健 committed
151 152 153 154
    }

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

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

182
                    }
183

184
                })
185 186 187
            confideListDialog?.show()
        }
    }
188 189 190 191 192 193 194 195 196 197 198 199 200
    /**
     * 倾诉列表页导医跳转,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)
        }
    }
201 202 203 204 205 206 207 208 209

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

    //////////////////////////////////////  倾诉列表页展示隐藏逻辑 代码块end  ///////////////////////////////////////////////////
严久程 committed
210 211 212 213 214 215 216 217 218 219 220 221 222

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

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

                    })
            }
            consultAssistantDialogFromMine?.show()
        }
    }

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

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


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

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

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

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

徐健 committed
323 324
                        })
                }
325
                consultAssistantActivityDialog?.show()
徐健 committed
326 327
            }
        }
328 329
    }

徐健 committed
330 331

    /**
332
     * 咨询师列表页Fragment隐藏
徐健 committed
333 334
     */
    fun hide() {
ydl committed
335
        consultAssistantFragmentDialog?.dismiss()
徐健 committed
336 337
    }

338 339 340 341
    /**
     * 咨询师列表页Fragment隐藏
     */
    fun hideAssistantActivity() {
ydl committed
342
        consultAssistantActivityDialog?.dismiss()
343 344
    }

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

徐健 committed
356
        expertSearchPageHasShown = false
357
        expertSearchActivityPageHasShown = false
徐健 committed
358
        consultAssistantDialogFromHomePage = null
严久程 committed
359
        consultAssistantDialogFromMine = null
360 361 362 363 364 365 366 367
        consultAssistantFragmentDialog = null
        consultAssistantActivityDialog = null
    }

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

372 373
        expertSearchActivityPageHasShown = false
        consultAssistantActivityDialog = null
374 375
    }

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

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

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

    }

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

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

    // 判定是否展示左侧的描述文本
    fun canShowDesc(): Boolean {
严久程 committed
446 447 448 449 450 451 452 453 454 455 456
//        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
457 458 459 460
    }

    fun setDescHide() {
        consultAssistantDialogFromHomePage?.setDescHide()
严久程 committed
461
        consultAssistantDialogFromMine?.setDescHide()
徐健 committed
462 463 464
        consultAssistantActivityDialog?.setDescHide()
        consultAssistantFragmentDialog?.setDescHide()
    }
465
}