YdlHomeFragment.kt 14.8 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
87 88
    var startTime by Delegates.notNull<Long>()
    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
            }
        }

ydl committed
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
//        val inputLayoutParams = ll_search.layoutParams as CoordinatorLayout.LayoutParams
//        val inputOriginMargin = inputLayoutParams.leftMargin
//        var inputOffset = DisplayUtils.dp2px(context, 20).toFloat()
//
//        appbar_layout.addOnOffsetChangedListener { appBarLayout, i ->
//            home_swipe_refresh_layout.isEnabled = i >= 0
//
//            val scale = java.lang.Float.valueOf(Math.abs(i).toFloat())!! / java.lang.Float.valueOf(
//                appBarLayout.totalScrollRange.toFloat()
//            )!!
//            view_search_toolbar_bg.alpha = scale
//            val leftMargin = inputOriginMargin - inputOffset * scale
//            val rightMargin = inputOriginMargin - inputOffset * scale
//            inputLayoutParams.setMargins(leftMargin.toInt(), 0, rightMargin.toInt(), 0)
//            ll_search.layoutParams = inputLayoutParams
//            val zheZhaoAlpha = ((1 - (0.2 * scale)).toFloat())
//            //以下判断是因为toolbar和遮罩层拦截住了点击事件,导致banner不好点击
//            if (zheZhaoAlpha == 1f) {
//                title_layout.visibility = View.GONE
//                toolbar.visibility = View.GONE
//            } else {
//                title_layout.visibility = View.VISIBLE
//                toolbar.visibility = View.VISIBLE
//            }
//            view_search_input_bg.alpha = zheZhaoAlpha
//        }
//        initStatus()
164 165 166 167 168 169

    }

    /**
     * 初始化状态栏位置
     */
ydl committed
170 171 172 173 174 175 176 177 178 179 180 181 182 183
//    private fun initStatus() {
//
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4以下不支持状态栏变色
//            val statusBarHeight = StatusBarUtils.getStatusBarHeight(activity)
//            var homeTitleBarHeight = resources.getDimension(R.dimen.home_home_title_bar_height)
//            val lp1 = view_search_toolbar_bg.layoutParams as RelativeLayout.LayoutParams
//            lp1.height = (homeTitleBarHeight + statusBarHeight).toInt()
//            view_search_toolbar_bg.layoutParams = lp1
//
//            val lp2 = toolbar.layoutParams as CollapsingToolbarLayout.LayoutParams
//            lp2.topMargin = statusBarHeight
//            toolbar.layoutParams = lp2
//        }
//    }
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208

    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
209
        confideLastSelectType = type
210 211 212 213 214
        mPresenter?.getConfideData(type, selectPosition)
    }

    override fun getConsultData(type: String, selectPosition: Int) {
        consultLastSelectPosition = selectPosition
徐健 committed
215
        consultLastSelectType = type
216 217 218 219 220 221 222 223 224 225
        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
226
                img_ad_card.visibility = View.VISIBLE
227 228 229 230 231 232 233 234 235 236 237 238 239 240
                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)
                    }
                }
            } else {
                img_ad.visibility = View.GONE
241
                img_ad_card.visibility = View.GONE
242 243 244 245 246 247 248 249
            }
            if (!TextUtils.isEmpty(act.imageBanner)) {
                val va = SharedPreferencesEditor.getString(act.imageBanner)
                if (TextUtils.equals("yes", va)) {
                    //已经显示过,不再弹出
                    return
                }
            }
250 251 252

            if (!ModularServiceManager.provide(IUserService::class.java).isLogin()||!ModularServiceManager.provide(IUserService::class.java).isFirstLogin()) {
                //未登录/首次登录 不显示
253 254
                return
            }
255

256 257 258
            if (!TextUtils.isEmpty(act.imageBanner)) {
                //展示弹窗
                if (aa == null) {
YKai committed
259
                    aa = ActivityDialog(mActivity!!, act.imageBanner, act.linkUrl, act.title)
260 261
                    aa?.show()
                    aa?.setOnDismissListener {
262
                        if (!TextUtils.isEmpty(act.title)) {
263
                            img_ad.post {
YKai committed
264
                                val heig = StatusBarUtils.getStatusBarHeight(mContext!!)
265 266
                                var location = IntArray(2)
                                img_ad.getLocationInWindow(location)
267
                                ActivityGuideDialog(
YKai committed
268
                                    mActivity!!,
269 270 271 272 273
                                    act.imageUrl,
                                    act.title,
                                    location[1] - heig,
                                    location[0]
                                ).show()
274 275 276 277 278 279 280 281 282 283 284 285 286
                            }
                        }
                    }
                }
                //仅展示一次,以后不再展示
                SharedPreferencesEditor.putString(act.imageBanner, "yes")
            }
        }
    }

    override fun homeDataResponse(list: MutableList<HomePagerDataBean>) {
        home_swipe_refresh_layout.isRefreshing = false
        //更新首页数据
ydl committed
287 288 289
        if (list.size > 0) {
            list[0].type = YdlHomeViewHolderConstract.HOME_IMAGE_BANNER
        }
290 291 292 293
        adapter?.updateItems(list)
        //每次全局更新后重置下标位
        confideLastSelectPosition = 0
        consultLastSelectPosition = 0
徐健 committed
294 295 296 297 298 299 300

        for (bean in list) {
            //咨询模块
            if (bean.type == YdlHomeViewHolderConstract.BUTTON_BANNER_VIEW) {
                consultLastSelectType = bean.headerBean!!.consultCategoryData!![0].id.toString()
            }
        }
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
    }

    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
        }
322 323 324
        if (!TextUtils.isEmpty(msg)){
            ToastHelper.show(msg)
        }
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
    }

    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)
376 377 378 379 380
        if (isVisibleToUser && isResumed) {
            showConsultAssistantDialog()
        } else {
            hideConsultAssistantDialog()
        }
381 382 383 384 385
        if (isVisibleToUser && isResumed) {
            onResume()
        }
    }

386 387
    private fun showConsultAssistantDialog() {
        ModularServiceManager.provide(IConsultantService::class.java)
YKai committed
388
            .showConsultAssistantDialog(mActivity!!)
389 390 391 392 393
    }

    private fun hideConsultAssistantDialog() {
        ModularServiceManager.provide(IConsultantService::class.java).hideConsultAssistantDialog()
    }
394 395 396 397 398
    override fun onStop() {
        super.onStop()
        endTime=System.currentTimeMillis()
        ActionCountUtils.count(HomeBIConstants.YDL_HOME_DWELL_TIME,(endTime-startTime).toString())
    }
399 400
    override fun onResume() {
        super.onResume()
401
        startTime=System.currentTimeMillis()
402
        if (userVisibleHint) {
403 404 405 406 407 408
            if (isFromCreate) {
                isFromCreate = false
                mPresenter?.loadHomeData()
            }else {
                mPresenter?.getConsultData(consultLastSelectType, consultLastSelectPosition)
                mPresenter?.getConfideData(confideLastSelectType, confideLastSelectPosition)
徐健 committed
409

410
            }
YKai committed
411
            mPresenter?.prepareCoupon(mActivity!!)
412 413 414

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