YdlHomeFragment.kt 14.4 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
23 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
import com.yidianling.home.constract.IHomeContract
28
import com.yidianling.home.constract.YdlHomeViewHolderConstract
29 30 31 32 33 34 35
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
36
import com.yidianling.im.api.service.IImService
37
import com.yidianling.user.api.service.IUserService
konghaorui committed
38 39 40
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.*
41

42

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

55 56
    private lateinit var mActivity: FragmentActivity
    private lateinit var mContext: Context
57 58 59 60 61 62 63 64 65 66 67 68

    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
69
    private var confideLastSelectType = ""
70 71 72 73
    /**
     * 咨询tablayout上次选中的西边
     */
    private var consultLastSelectPosition = 0
徐健 committed
74
    private var consultLastSelectType= ""
75 76 77 78 79
    /**
     * 悬浮tablayout监听事件
     */
    private var scrollListner: HomeConfideRecyleSuspendListener? = null

80 81 82 83 84
    /**
     * 如果是第一次加载,则调用所有接口进行刷新,否则,只调用咨询和倾诉接口
     */
    private var isFromCreate: Boolean = true

85
    override fun layoutResId(): Int {
konghaorui committed
86
        return R.layout.home_fragment_home_module
87 88
    }

89 90 91 92
    override fun getStatusViewOptions(): StatusBarOptions {
        return StatusBarOptions(isAddStatusView = true, statusBarDarkMode = true)
    }

93
    override fun initDataAndEvent() {
94 95
        mActivity = requireActivity()
        mContext = requireContext()
YKai committed
96
        homeEvent = HomeImpl(mActivity!!, this)
97 98 99 100 101
        initView()
        initAdapter()
    }

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

        scrollListner = HomeConfideRecyleSuspendListener()
YKai committed
110
        home_module_fragment_recycler.addOnScrollListener(scrollListner!!)
111 112 113
    }

    private fun initView() {
114 115


116
        home_swipe_refresh_layout.setOnRefreshListener(this)
117 118
        home_swipe_refresh_layout.setColorSchemeColors(
            ContextCompat.getColor(
YKai committed
119
                mContext!!,
120
                R.color.platform_main_theme
121 122
            )
        )
123
        home_swipe_refresh_layout.setProgressViewOffset(false, 0, 200)
124
        home_swipe_refresh_layout.isEnabled = true
125
        etSearch.setOnClickListener { homeEvent?.searchTvClick("") }
126

127 128
        home_page_xiaoyi.setOnClickListener {
            activity?.let {
YKai committed
129
                ModularServiceManager.provide(IImService::class.java).startP2PXiaoYi(mActivity!!)
130 131 132
            }
        }

ydl committed
133 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
//        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()
160 161 162 163 164 165

    }

    /**
     * 初始化状态栏位置
     */
ydl committed
166 167 168 169 170 171 172 173 174 175 176 177 178 179
//    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
//        }
//    }
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

    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
205
        confideLastSelectType = type
206 207 208 209 210
        mPresenter?.getConfideData(type, selectPosition)
    }

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

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

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

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

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

    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
        }
318 319 320
        if (!TextUtils.isEmpty(msg)){
            ToastHelper.show(msg)
        }
321 322 323 324 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
    }

    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)
372 373 374 375 376
        if (isVisibleToUser && isResumed) {
            showConsultAssistantDialog()
        } else {
            hideConsultAssistantDialog()
        }
377 378 379 380 381
        if (isVisibleToUser && isResumed) {
            onResume()
        }
    }

382 383
    private fun showConsultAssistantDialog() {
        ModularServiceManager.provide(IConsultantService::class.java)
YKai committed
384
            .showConsultAssistantDialog(mActivity!!)
385 386 387 388 389 390
    }

    private fun hideConsultAssistantDialog() {
        ModularServiceManager.provide(IConsultantService::class.java).hideConsultAssistantDialog()
    }

391 392 393
    override fun onResume() {
        super.onResume()
        if (userVisibleHint) {
徐健 committed
394

395 396 397 398 399 400
            if (isFromCreate) {
                isFromCreate = false
                mPresenter?.loadHomeData()
            }else {
                mPresenter?.getConsultData(consultLastSelectType, consultLastSelectPosition)
                mPresenter?.getConfideData(confideLastSelectType, confideLastSelectPosition)
徐健 committed
401

402
            }
YKai committed
403
            mPresenter?.prepareCoupon(mActivity!!)
404 405 406

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