YdlHomeFragment.kt 13 KB
Newer Older
1 2 3
package com.yidianling.home.ui.fragment

import android.app.Dialog
4
import android.content.Context
5 6
import android.text.TextUtils
import android.view.View
YKai committed
7
import androidx.core.content.ContextCompat
8
import androidx.fragment.app.FragmentActivity
YKai committed
9 10
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
konghaorui committed
11
import com.alibaba.android.arouter.facade.annotation.Route
12 13 14 15 16
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydlcommon.base.BaseMvpFragment
17
import com.ydl.ydlcommon.bean.StatusBarOptions
18 19
import com.ydl.ydlcommon.data.http.BaseResponse
import com.ydl.ydlcommon.modular.ModularServiceManager
YKai committed
20 21 22
import com.ydl.ydlcommon.utils.SharedPreferencesEditor
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.Utils
霍志良 committed
23
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
24 25 26 27
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.consultant.api.IConsultantService
import com.yidianling.home.R
import com.yidianling.home.adapter.YdlHomeAdapter
霍志良 committed
28
import com.yidianling.home.constants.HomeBIConstants
29
import com.yidianling.home.constract.IHomeContract
30
import com.yidianling.home.constract.YdlHomeViewHolderConstract
31 32 33 34 35 36 37
import com.yidianling.home.dialog.ActivityDialog
import com.yidianling.home.dialog.ActivityGuideDialog
import com.yidianling.home.event.HomeImpl
import com.yidianling.home.listener.HomeConfideRecyleSuspendListener
import com.yidianling.home.model.bean.*
import com.yidianling.home.presenter.HomePresenterImpl
import com.yidianling.home.ui.view.CouponDialog
38
import com.yidianling.im.api.service.IImService
39
import com.yidianling.user.api.service.IUserService
konghaorui committed
40 41 42
import kotlinx.android.synthetic.xlzx.home_fragment_home_module.*
import kotlinx.android.synthetic.xlzx.home_layout_home_module_content.*
import kotlinx.android.synthetic.xlzx.home_layout_home_module_input.*
霍志良 committed
43
import kotlin.properties.Delegates
44

45

46 47 48 49 50 51 52
/**
 * @author <a href="https://www.jianshu.com/u/c1e5310dd724">xujian</a>
 * @描述: 壹点灵首页fragment
 * @Copyright Copyright (c) 2019
 * @Company 壹点灵
 * @date 2019/02/12
 */
konghaorui committed
53
@Route(path = "/home/home")
54
class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>(),
55 56
    IHomeContract.View,
    SwipeRefreshLayout.OnRefreshListener {
57

58 59
    private lateinit var mActivity: FragmentActivity
    private lateinit var mContext: Context
60 61 62 63 64 65 66 67 68 69 70 71

    private var adapter: YdlHomeAdapter? = null
    private var homeEvent: HomeImpl? = null
    private var dialog: CouponDialog? = null

    //双11活动弹窗
    private var aa: Dialog? = null

    /**
     * tablayou上次选中的tab下标
     */
    private var confideLastSelectPosition = 0
徐健 committed
72
    private var confideLastSelectType = ""
73 74 75 76
    /**
     * 咨询tablayout上次选中的西边
     */
    private var consultLastSelectPosition = 0
徐健 committed
77
    private var consultLastSelectType= ""
78 79 80 81 82
    /**
     * 悬浮tablayout监听事件
     */
    private var scrollListner: HomeConfideRecyleSuspendListener? = null

83 84 85 86
    /**
     * 如果是第一次加载,则调用所有接口进行刷新,否则,只调用咨询和倾诉接口
     */
    private var isFromCreate: Boolean = true
刘鹏 committed
87
    var startTime = System.currentTimeMillis()
88
    var endTime by Delegates.notNull<Long>()
89
    override fun layoutResId(): Int {
konghaorui committed
90
        return R.layout.home_fragment_home_module
91 92
    }

93 94 95 96
    override fun getStatusViewOptions(): StatusBarOptions {
        return StatusBarOptions(isAddStatusView = true, statusBarDarkMode = true)
    }

97
    override fun initDataAndEvent() {
98 99
        mActivity = requireActivity()
        mContext = requireContext()
YKai committed
100
        homeEvent = HomeImpl(mActivity!!, this)
101 102 103 104 105
        initView()
        initAdapter()
    }

    private fun initAdapter() {
106 107
        mPresenter?.localHomeData(mContext, "home_data_xlzx.json")
        adapter = YdlHomeAdapter(mContext, homeEvent!!, ArrayList())
YKai committed
108 109
        val layoutManager =
            LinearLayoutManager(context)
110 111 112 113
        home_module_fragment_recycler.layoutManager = layoutManager
        home_module_fragment_recycler.adapter = adapter

        scrollListner = HomeConfideRecyleSuspendListener()
YKai committed
114
        home_module_fragment_recycler.addOnScrollListener(scrollListner!!)
115 116 117
    }

    private fun initView() {
118 119


120
        home_swipe_refresh_layout.setOnRefreshListener(this)
121 122
        home_swipe_refresh_layout.setColorSchemeColors(
            ContextCompat.getColor(
123
                mContext,
124
                R.color.platform_main_theme
125 126
            )
        )
127
        home_swipe_refresh_layout.setProgressViewOffset(false, 0, 200)
128
        home_swipe_refresh_layout.isEnabled = true
129
        etSearch.setOnClickListener { homeEvent?.searchTvClick("") }
130

131 132
        home_page_xiaoyi.setOnClickListener {
            activity?.let {
YKai committed
133
                ModularServiceManager.provide(IImService::class.java).startP2PXiaoYi(mActivity!!)
134 135 136
            }
        }

137

138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164

    }

    override fun initDataAndEventLazy() {
    }

    override fun createPresenter(): HomePresenterImpl {
        return HomePresenterImpl()
    }

    override fun onRefresh() {
        home_swipe_refresh_layout.isRefreshing = true
        mPresenter?.refreshHomeData()
    }

    override fun resetModuleTabPosition() {
        adapter?.confideSelectPosition = 0
        adapter?.consultSelectPosition = 0
    }

    /**
     * 获取倾述列表数据
     * @param type 倾述类型
     * @param selectPosition 选中的position
     */
    override fun getConfideData(type: String, selectPosition: Int) {
        confideLastSelectPosition = selectPosition
徐健 committed
165
        confideLastSelectType = type
166 167 168 169 170
        mPresenter?.getConfideData(type, selectPosition)
    }

    override fun getConsultData(type: String, selectPosition: Int) {
        consultLastSelectPosition = selectPosition
徐健 committed
171
        consultLastSelectType = type
172 173 174 175 176 177 178 179 180 181
        mPresenter?.getConsultData(type, selectPosition)
    }

    override fun homeHeadResponse(homeHeaderBean: HomeHeaderBean) {
        //展示活动数据
        val act = homeHeaderBean.activityResponse

        if (act != null) {
            if (!TextUtils.isEmpty(act.imageUrl)) {
                img_ad.visibility = View.VISIBLE
182
                img_ad_card.visibility = View.VISIBLE
183
                ActionCountUtils.count(HomeBIConstants.YDL_HOME_SEARCH_TAG,"1")
184 185 186 187 188 189 190 191 192 193 194
                GlideApp.with(this).load(act.imageUrl).into(img_ad)
                img_ad.setOnClickListener {
                    if (Utils.isFastClick()) {
                        //防止连击
                        return@setOnClickListener
                    }
                    if (act.btnLinkurl != null && act.btnLinkurl!!.startsWith("http")) {
                        NewH5Activity.start(activity, H5Params(act.btnLinkurl!!, null))
                    } else {
                        YDLRouterManager.router(act.btnLinkurl)
                    }
195
                    //定制咨询点击事件埋点
196 197
                    ActionCountUtils.count(HomeBIConstants.YDL_HOME_SEARCH_TAG_CLICK,"1")

198

199 200 201
                }
            } else {
                img_ad.visibility = View.GONE
202
                img_ad_card.visibility = View.GONE
203 204 205 206 207 208 209 210
            }
            if (!TextUtils.isEmpty(act.imageBanner)) {
                val va = SharedPreferencesEditor.getString(act.imageBanner)
                if (TextUtils.equals("yes", va)) {
                    //已经显示过,不再弹出
                    return
                }
            }
211

212 213
            if (!ModularServiceManager.provide(IUserService::class.java).isLogin()) {
                //未登录不显示
214 215 216 217 218
                return
            }
            if (!TextUtils.isEmpty(act.imageBanner)) {
                //展示弹窗
                if (aa == null) {
219
                    //99元3小时弹出事件
220
                    ActionCountUtils.count(HomeBIConstants.YDL_HOME_POPUPWINDOWS_PAGE_POPUP,act?.title?:"1")
YKai committed
221
                    aa = ActivityDialog(mActivity!!, act.imageBanner, act.linkUrl, act.title)
222 223
                    aa?.show()
                    aa?.setOnDismissListener {
224
                        if (!TextUtils.isEmpty(act.title)) {
225
                            img_ad.post {
YKai committed
226
                                val heig = StatusBarUtils.getStatusBarHeight(mContext!!)
227 228
                                var location = IntArray(2)
                                img_ad.getLocationInWindow(location)
229
                                ActivityGuideDialog(
YKai committed
230
                                    mActivity!!,
231 232 233 234 235
                                    act.imageUrl,
                                    act.title,
                                    location[1] - heig,
                                    location[0]
                                ).show()
236
                               }
237 238 239 240 241 242 243 244 245 246 247 248
                        }
                    }
                }
                //仅展示一次,以后不再展示
                SharedPreferencesEditor.putString(act.imageBanner, "yes")
            }
        }
    }

    override fun homeDataResponse(list: MutableList<HomePagerDataBean>) {
        home_swipe_refresh_layout.isRefreshing = false
        //更新首页数据
ydl committed
249 250 251
        if (list.size > 0) {
            list[0].type = YdlHomeViewHolderConstract.HOME_IMAGE_BANNER
        }
252 253 254 255
        adapter?.updateItems(list)
        //每次全局更新后重置下标位
        confideLastSelectPosition = 0
        consultLastSelectPosition = 0
徐健 committed
256 257 258 259 260 261 262

        for (bean in list) {
            //咨询模块
            if (bean.type == YdlHomeViewHolderConstract.BUTTON_BANNER_VIEW) {
                consultLastSelectType = bean.headerBean!!.consultCategoryData!![0].id.toString()
            }
        }
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
    }

    override fun confideDataResponse(data: HomeConfideBean, selectPosition: Int) {
        //更新倾述列表数据
        adapter?.updateConfideData(data, selectPosition)
    }

    override fun consultDataResponse(data: HomeConsultBean, selectPosition: Int) {
        //更新咨询列表数据
        adapter?.updateConsultData(data, selectPosition)
    }

    override fun askDataResponse(data: HomeAskBean, position: Int) {
        //更新问答模块数据
        adapter?.updateAskData(data, position)
    }

    override fun homeDataFail(msg: String) {
        if (home_swipe_refresh_layout != null) {
            home_swipe_refresh_layout.isRefreshing = false
        }
284 285 286
        if (!TextUtils.isEmpty(msg)){
            ToastHelper.show(msg)
        }
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
    }

    override fun couponDataResponse(data: List<CouponBean>) {
        showCouponDialog(data)
    }

    private fun showCouponDialog(data: List<CouponBean>) {
        if (dialog == null) {
            dialog = CouponDialog(activity, data, homeEvent?.clickEnsure(data))
        }

        if (!dialog!!.isShowing) {
            dialog?.show()
        }

    }

    override fun receiveCoupon(data: List<CouponBean>) {
        mPresenter?.receiveCoupon(data)
    }

    override fun receiveCouponResponse(data: BaseResponse<Any>) {
        if (data.code == 200) {
            dialog?.updateStatus(CouponDialog.STATUS_GET)
        } else {
            ToastHelper.show(data.msg)
        }
    }

    override fun askZan(position: Int, index: Int, id: String) {
        mPresenter?.askZan(position, index, id)
    }

    override fun askFocus(position: Int, id: String) {
        mPresenter?.askFocus(position, id)
    }

    override fun showHomeProgress() {
        showHomeProgress()
    }

    override fun showRefreshLayout() {
        home_swipe_refresh_layout.isRefreshing = true
    }

    override fun dismissHomeProgress() {
        dismissHomeProgress()
    }

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
338 339 340 341 342
        if (isVisibleToUser && isResumed) {
            showConsultAssistantDialog()
        } else {
            hideConsultAssistantDialog()
        }
343 344 345 346 347
        if (isVisibleToUser && isResumed) {
            onResume()
        }
    }

348 349
    private fun showConsultAssistantDialog() {
        ModularServiceManager.provide(IConsultantService::class.java)
YKai committed
350
            .showConsultAssistantDialog(mActivity!!)
351 352 353 354 355
    }

    private fun hideConsultAssistantDialog() {
        ModularServiceManager.provide(IConsultantService::class.java).hideConsultAssistantDialog()
    }
356 357
    override fun onStop() {
        super.onStop()
刘鹏 committed
358
        endTime = System.currentTimeMillis()
359 360
        ActionCountUtils.count(HomeBIConstants.YDL_HOME_DWELL_TIME,(endTime-startTime).toString())
    }
361 362
    override fun onResume() {
        super.onResume()
刘鹏 committed
363
        startTime = System.currentTimeMillis()
364
        if (userVisibleHint) {
刘鹏 committed
365
            ActionCountUtils.count(HomeBIConstants.YDL_USER_MAIN_PAGE_VISIT)
366 367 368 369 370 371
            if (isFromCreate) {
                isFromCreate = false
                mPresenter?.loadHomeData()
            }else {
                mPresenter?.getConsultData(consultLastSelectType, consultLastSelectPosition)
                mPresenter?.getConfideData(confideLastSelectType, confideLastSelectPosition)
徐健 committed
372

373
            }
YKai committed
374
            mPresenter?.prepareCoupon(mActivity!!)
375 376 377

            //走咨询助理浮层展示逻辑,是否展示由内部条件与接口判断
            showConsultAssistantDialog()
378 379 380
        }
    }
}