package com.yidianling.home.ui.fragment import android.app.Dialog import android.graphics.Typeface import android.os.Build import android.support.design.widget.TabLayout import android.support.v4.content.ContextCompat import android.support.v4.widget.SwipeRefreshLayout import android.support.v7.widget.LinearLayoutManager import android.text.TextUtils import android.view.View import android.widget.LinearLayout import android.widget.RelativeLayout import android.widget.TextView 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 import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.utils.SharedPreferencesEditor import com.ydl.ydlcommon.utils.StatusBarUtils import com.ydl.ydlcommon.utils.Utils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.yidianling.consultant.api.IConsultantService import com.yidianling.home.constants.HomeBIConstants import com.yidianling.home.R import com.yidianling.home.adapter.YdlHomeAdapter import com.yidianling.home.constract.IHomeContract import com.yidianling.home.constract.YdlHomeViewHolderConstract import com.yidianling.home.dialog.ActivityDialog import com.yidianling.home.dialog.ActivityGuideDialog import com.yidianling.home.event.HomeImpl import com.yidianling.home.event.IHomeBaseEvent 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 import com.yidianling.home.ui.utils.Double11ActivityManagerUtils import com.yidianling.home.utils.HomeAnimUtils import com.yidianling.user.api.service.IUserService import kotlinx.android.synthetic.ydl.home_fragment.* /** * @author <a href="https://www.jianshu.com/u/c1e5310dd724">xujian</a> * @描述: 壹点灵首页fragment * @Copyright Copyright (c) 2019 * @Company 壹点灵 * @date 2019/02/12 */ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>(), IHomeContract.View, SwipeRefreshLayout.OnRefreshListener { private var adapter: YdlHomeAdapter? = null private var homeEvent: HomeImpl? = null private var dialog: CouponDialog? = null //双11活动弹窗 //双11活动弹窗 private var aa: Dialog? = null /** * tablayou上次选中的tab下标 */ private var confideLastSelectPosition = 0 private var confideLastSelectType = "" /** * TabLayout.OnTabSelectedListener */ private var consultTabListener: TabLayout.OnTabSelectedListener? = null private var confideTabListener: TabLayout.OnTabSelectedListener? = null /** * 咨询tablayout上次选中的下标 */ private var consultLastSelectPosition = 0 private var consultLastSelectType= "" /** * 悬浮tablayout监听事件 */ private var scrollListner: HomeConfideRecyleSuspendListener? = null //咨询模块数据缓存 private var consultCategoryDate: MutableList<HomeHeaderBean.ConsultCategoryDateBean>? = null private var searchContent: String = "搜索话题、咨询师姓名" override fun layoutResId(): Int { return R.layout.home_fragment } override fun initDataAndEvent() { homeEvent = HomeImpl(activity, this) initView() initTopButtonBanner() initAdapter() } override fun startAnim() { HomeAnimUtils.startAnim(context, rl_top, rl_search, home_service_call, home_tv) HomeAnimUtils.startSearchShow(ll_top_function, view_search_input_bg, home_tv, iv_search_icon, img_ad) } override fun endAnim() { HomeAnimUtils.endAnim(context, rl_top, rl_search, home_tv, home_service_call, this) HomeAnimUtils.startSearchHide(ll_top_function, view_search_input_bg, home_tv, iv_search_icon, img_ad) } override fun getSearchContent(): String { return if (TextUtils.isEmpty(searchContent)) "搜索话题、咨询师姓名" else searchContent } /** * 设置顶部导航栏 功能点击事件 */ private fun initTopButtonBanner() { tv_consult.setOnClickListener { homeEvent?.reservationExpertsClick() } tv_confide.setOnClickListener { homeEvent?.nowConfideClick() } tv_course.setOnClickListener { homeEvent?.psychologyClassClick() } tv_test.setOnClickListener { homeEvent?.psychologyTestClick() } rl_backTop.setOnClickListener { home_module_fragment_recycler.scrollToPosition(0) } } private fun initAdapter() { mPresenter?.localHomeData(this.context, "home_data.json") adapter = YdlHomeAdapter(context, homeEvent!!, ArrayList()) val layoutManager = LinearLayoutManager(context) home_module_fragment_recycler.layoutManager = layoutManager home_module_fragment_recycler.adapter = adapter scrollListner = HomeConfideRecyleSuspendListener() home_module_fragment_recycler.addOnScrollListener(scrollListner) setSuspendListener() } private fun initView() { home_swipe_refresh_layout?.setOnRefreshListener(this) home_swipe_refresh_layout?.setColorSchemeColors(ContextCompat.getColor(context, R.color.platform_main_theme_blue)) home_swipe_refresh_layout?.setProgressViewOffset(false, 0, 200) home_module_fragment_recycler.addOnScrollListener(homeEvent?.onPageScroll(view_rl_top_bg)) home_service_call.setOnClickListener { homeEvent?.serviceCallClick() } home_tv.setOnClickListener { homeEvent?.searchTvClick(searchContent) } initStatus() } /** * 初始化状态栏位置 */ 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_rl_top_bg.layoutParams as RelativeLayout.LayoutParams lp1.height = (homeTitleBarHeight + statusBarHeight).toInt() view_rl_top_bg.layoutParams = lp1 val lp2 = rl_top.layoutParams as RelativeLayout.LayoutParams lp2.topMargin = statusBarHeight rl_top.layoutParams = lp2 } } 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 } /** * 设置悬浮顶部监听数据 */ private fun setSuspendListener() { scrollListner?.setContext(context) scrollListner?.setHomeView(this) scrollListner?.setConfideFilterView(ll_layout) scrollListner?.setConsultFilterView(ll_consultLayout) scrollListner?.setSectionAdapter(adapter!!) scrollListner?.setPhoneCallImageView(home_service_call) } /** * 获取倾述列表数据 * @param type 倾述类型 * @param selectPosition 选中的position */ override fun getConfideData(type: String, selectPosition: Int) { confideLastSelectPosition = selectPosition confideLastSelectType = type mPresenter?.getConfideData(type, selectPosition) } /** * 获取咨询列表数据 */ override fun getConsultData(type: String, selectPosition: Int) { consultLastSelectPosition = selectPosition consultLastSelectType = type 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 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 } if (!TextUtils.isEmpty(act.imageBanner)) { val va = SharedPreferencesEditor.getString(act.imageBanner) if (TextUtils.equals("yes", va)) { //已经显示过,不再弹出 return } } if (!ModularServiceManager.provide(IUserService::class.java).isLogin()) { //未登录不显示 return } if (Double11ActivityManagerUtils.notShowDouble11Activity) { return } if (!TextUtils.isEmpty(act.imageBanner)) { //展示弹窗 if (aa == null) { aa = ActivityDialog(activity, act.imageBanner, act.linkUrl, act.title) aa?.show() aa?.setOnDismissListener { //文案不为空才显示引导--李思开 if (!TextUtils.isEmpty(act.title)){ ActivityGuideDialog(activity, act.imageUrl, act.title).show() } } Double11ActivityManagerUtils.notShowDouble11Activity = false } //仅展示一次,以后不再展示 SharedPreferencesEditor.putString(act.imageBanner, "yes") } } } override fun homeDataResponse(list: MutableList<HomePagerDataBean>) { home_swipe_refresh_layout.isRefreshing = false //更新首页数据 adapter?.updateItems(list) if (!TextUtils.isEmpty(list[0].headerBean?.doctorName)) { searchContent = list[0].headerBean?.doctorName!! home_tv.text = searchContent } //每次全局更新后重置下标位 confideLastSelectPosition = 0 consultLastSelectPosition = 0 //初始化fragment中的tablayout布局,悬停效果使用 for (bean in list) { //咨询模块 if (bean.type == YdlHomeViewHolderConstract.PAGER_BANNER_VIEW) { initTabLayout(bean.headerBean!!.listenCategoryDate) initConsultTabLayout(bean.headerBean!!.consultCategoryData) consultLastSelectType = bean.headerBean!!.consultCategoryData!![0].id.toString() } } } /** * 初始化fragment中的tablayout布局,悬停效果使用 */ private fun initTabLayout(listenCategoryDate: List<HomeHeaderBean.ListenCategoryDateBean>?) { if (confideTabListener == null) { confideTabListener = ConfideExpertTabSelectedListener(listenCategoryDate!!, tab_layout) tab_layout.addOnTabSelectedListener(confideTabListener!!) } tab_layout.removeAllTabs() for ((index, bean) in listenCategoryDate!!.withIndex()) { tab_layout.addTab(tab_layout.newTab().setText(bean.name), index == confideLastSelectPosition) } var textView = ((tab_layout!!.getChildAt(0) as LinearLayout).getChildAt(confideLastSelectPosition) as LinearLayout).getChildAt(1) if (textView != null && textView is TextView) { textView.textSize = 17f textView.setTextColor(ContextCompat.getColor(activity, R.color.platform_color_242424)) textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD) } } /** * 初始化fragment中咨询tablayout布局,悬停效果使用 */ private fun initConsultTabLayout(listenCategoryDate: List<HomeHeaderBean.ConsultCategoryDateBean>?) { if (consultTabListener == null) { consultTabListener = ConsultExpertTabSelectedListener(listenCategoryDate!!, tab_consultLayout) tab_consultLayout.addOnTabSelectedListener(consultTabListener!!) } if (null == consultCategoryDate) { consultCategoryDate = ArrayList() } //如果 数据不变 则不重新构建 if (null != listenCategoryDate && consultCategoryDate!!.size == listenCategoryDate.size && consultCategoryDate!!.retainAll(listenCategoryDate)) { return } consultCategoryDate?.clear() if (null != listenCategoryDate) { consultCategoryDate?.addAll(listenCategoryDate) } tab_consultLayout.removeAllTabs() for ((index, bean) in listenCategoryDate!!.withIndex()) { tab_consultLayout.addTab(tab_consultLayout.newTab().setText(bean.name), index == confideLastSelectPosition) } val textView = ((tab_consultLayout!!.getChildAt(0) as LinearLayout).getChildAt(confideLastSelectPosition) as LinearLayout).getChildAt(1) if (textView != null && textView is TextView) { textView.textSize = 17f textView.setTextColor(ContextCompat.getColor(activity, R.color.platform_color_242424)) textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD) } } 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) { home_swipe_refresh_layout?.isRefreshing = false // ToastHelper.show(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) if (isVisibleToUser && isResumed) { showConsultAssistantDialog() } else { hideConsultAssistantDialog() } if (isVisibleToUser && isResumed) { onResume() } } private fun showConsultAssistantDialog() { ModularServiceManager.provide(IConsultantService::class.java).showConsultAssistantDialog(activity) } private fun hideConsultAssistantDialog() { ModularServiceManager.provide(IConsultantService::class.java).hideConsultAssistantDialog() } override fun onResume() { super.onResume() if (userVisibleHint) { ActionCountUtils.count(HomeBIConstants.YDL_USER_MAIN_PAGE_VISIT) mPresenter?.getConsultData(consultLastSelectType, consultLastSelectPosition) mPresenter?.getConfideData(confideLastSelectType, confideLastSelectPosition) showConsultAssistantDialog() } } /** * 咨询楼层tablayout */ inner class ConsultExpertTabSelectedListener : TabLayout.OnTabSelectedListener { private var list: List<HomeHeaderBean.ConsultCategoryDateBean>? = null private var tabLayout: TabLayout? = null constructor(list: List<HomeHeaderBean.ConsultCategoryDateBean>, tabLayout: TabLayout) { this.list = list this.tabLayout = tabLayout } override fun onTabReselected(tab: TabLayout.Tab?) { } override fun onTabUnselected(tab: TabLayout.Tab?) { var textView = ((tabLayout!!.getChildAt(0) as LinearLayout).getChildAt(tab!!.position) as LinearLayout).getChildAt(1) if (textView != null && textView is TextView) { textView.textSize = 15f textView.setTextColor(ContextCompat.getColor(activity, R.color.platform_color_333333)) } } override fun onTabSelected(tab: TabLayout.Tab?) { if (tab!!.position == consultLastSelectPosition) { return } var textView = ((tabLayout!!.getChildAt(0) as LinearLayout).getChildAt(tab!!.position) as LinearLayout).getChildAt(1) if (textView != null && textView is TextView) { textView.textSize = 17f textView.setTextColor(ContextCompat.getColor(activity, R.color.platform_color_242424)) textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD) } homeEvent!!.getConsultData(list!![tab!!.position], tab!!.position) } } inner class ConfideExpertTabSelectedListener : TabLayout.OnTabSelectedListener { private var list: List<HomeHeaderBean.ListenCategoryDateBean>? = null private var tabLayout: TabLayout? = null constructor(list: List<HomeHeaderBean.ListenCategoryDateBean>, tabLayout: TabLayout) { this.list = list this.tabLayout = tabLayout } override fun onTabReselected(tab: TabLayout.Tab?) { } override fun onTabUnselected(tab: TabLayout.Tab?) { var textView = ((tabLayout!!.getChildAt(0) as LinearLayout).getChildAt(tab!!.position) as LinearLayout).getChildAt(1) if (textView != null && textView is TextView) { textView.textSize = 15f textView.setTextColor(ContextCompat.getColor(activity, R.color.platform_color_333333)) } } override fun onTabSelected(tab: TabLayout.Tab?) { if (tab!!.position == confideLastSelectPosition) { return } var textView = ((tabLayout!!.getChildAt(0) as LinearLayout).getChildAt(tab!!.position) as LinearLayout).getChildAt(1) if (textView != null && textView is TextView) { textView.textSize = 17f textView.setTextColor(ContextCompat.getColor(activity, R.color.platform_color_242424)) textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD) } homeEvent!!.getConfideData(list!![tab!!.position], tab!!.position) } } override fun onDestroyView() { super.onDestroyView() HomeAnimUtils.clear() } }