Commit 60359c9c by 刘鹏

Merge branch 'feat/hotwordconfignew' into 'release'

热门词配置(home、consultant组件、consultantapi组件)

See merge request app_android_lib/YDL-Component!250
parents 752ca100 81b467e8
...@@ -2,7 +2,7 @@ apply plugin: 'com.android.library' ...@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply from: "../../maven_push_api.gradle" apply from: "../../maven_push_api.gradle"
version = '1.0.0' version = '1.0.2'
android { android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"] compileSdkVersion rootProject.ext.android["compileSdkVersion"]
......
package com.yidianling.consultant
import com.yidianling.consultant.bean.FunctionWordConsultBean
interface OnBottomWordListener {
fun onBottomWord(wordList: MutableList<FunctionWordConsultBean>)
}
\ No newline at end of file
...@@ -6,6 +6,7 @@ import androidx.fragment.app.Fragment ...@@ -6,6 +6,7 @@ import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.template.IProvider import com.alibaba.android.arouter.facade.template.IProvider
import com.yidianling.consultant.bean.GuideBean import com.yidianling.consultant.bean.GuideBean
import com.yidianling.consultant.bean.Keyworks import com.yidianling.consultant.bean.Keyworks
import com.yidianling.consultant.OnBottomWordListener
/** /**
* Created by xj on 2019/11/14. * Created by xj on 2019/11/14.
...@@ -39,11 +40,15 @@ interface IConsultantService: IProvider { ...@@ -39,11 +40,15 @@ interface IConsultantService: IProvider {
fun requestGuideData() fun requestGuideData()
fun jumpConsultAssistant(activity: Activity, location:Int) fun jumpConsultAssistant(activity: Activity, location: Int)
//根据返回Type跳转自主或者导医 //根据返回Type跳转自主或者导医
fun dueToTypeJumpAutoOrGuide(activity: Activity, location:Int,doctorId:Int,url:String) fun dueToTypeJumpAutoOrGuide(activity: Activity, location: Int, doctorId: Int, url: String)
// 咨询列表页显示咨询助理弹框 // 咨询列表页显示咨询助理弹框
fun showConfideListDialog(activity: Activity) fun showConfideListDialog(activity: Activity)
//获取底纹词
fun getbottomWord(type: Int, listener: OnBottomWordListener)
} }
\ No newline at end of file
package com.yidianling.consultant.bean
data class FunctionWordConsultBean(
var id: Long?,
var word: String?,
var type: Int?,
var jumpUrl: String?
)
\ No newline at end of file
...@@ -8,7 +8,7 @@ ext { ...@@ -8,7 +8,7 @@ ext {
"m-consultant" : "0.0.60.78", "m-consultant" : "0.0.60.78",
"m-fm" : "0.0.30.09", "m-fm" : "0.0.30.09",
"m-user" : "0.0.62.72", "m-user" : "0.0.62.72",
"m-home" : "0.0.24.00", "m-home" : "0.0.24.04",
"m-im" : "0.0.21.69", "m-im" : "0.0.21.69",
"m-dynamic" : "0.0.7.80", "m-dynamic" : "0.0.7.80",
"m-article" : "0.0.0.10", "m-article" : "0.0.0.10",
...@@ -231,7 +231,7 @@ ext { ...@@ -231,7 +231,7 @@ ext {
"ydl-m-tests-api" : "com.ydl:m-tests-api:1.0.0", "ydl-m-tests-api" : "com.ydl:m-tests-api:1.0.0",
"ydl-m-im-api" : "com.ydl:m-im-api:1.0.2", "ydl-m-im-api" : "com.ydl:m-im-api:1.0.2",
"ydl-m-home-api" : "com.ydl:m-home-api:${ydlPublishVersion["m-home-api"]}", "ydl-m-home-api" : "com.ydl:m-home-api:${ydlPublishVersion["m-home-api"]}",
"ydl-m-consultant-api" : "com.ydl:m-consultant-api:1.0.0", "ydl-m-consultant-api" : "com.ydl:m-consultant-api:1.0.2",
"ydl-m-dynamic-api" : "com.ydl:m-dynamic-api:1.0.0", "ydl-m-dynamic-api" : "com.ydl:m-dynamic-api:1.0.0",
"ydl-m-confide-api" : "com.ydl:m-confide-api:1.0.4", "ydl-m-confide-api" : "com.ydl:m-confide-api:1.0.4",
"ydl-m-course-api" : "com.ydl:m-course-api:1.0.0", "ydl-m-course-api" : "com.ydl:m-course-api:1.0.0",
......
...@@ -40,6 +40,7 @@ import com.yidianling.common.tools.LogUtil ...@@ -40,6 +40,7 @@ import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.RxImageTool
import com.yidianling.common.tools.ToastUtil import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.adapter.ExpertSearchAdapter import com.yidianling.consultant.adapter.ExpertSearchAdapter
import com.yidianling.consultant.bean.FunctionWordConsultBean
import com.yidianling.consultant.constants.ConsultBIConstants import com.yidianling.consultant.constants.ConsultBIConstants
import com.yidianling.consultant.constants.ConsultBIConstants.ConsultEvent.Companion.YDL_USER_CONSULT_SEARCH_CLICK import com.yidianling.consultant.constants.ConsultBIConstants.ConsultEvent.Companion.YDL_USER_CONSULT_SEARCH_CLICK
import com.yidianling.consultant.listener.OnCategoriesSelectedListener import com.yidianling.consultant.listener.OnCategoriesSelectedListener
...@@ -53,25 +54,32 @@ import com.yidianling.consultant.ui.view.CategoryPopupWindow ...@@ -53,25 +54,32 @@ import com.yidianling.consultant.ui.view.CategoryPopupWindow
import com.yidianling.consultant.ui.view.FilterPopupWindow import com.yidianling.consultant.ui.view.FilterPopupWindow
import com.yidianling.consultant.ui.view.SortPopupWindow import com.yidianling.consultant.ui.view.SortPopupWindow
import com.yidianling.consultant.ui.view.topView.RecommendListView import com.yidianling.consultant.ui.view.topView.RecommendListView
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.consultant_activity_expert_search_list.* import kotlinx.android.synthetic.main.consultant_activity_expert_search_list.*
import kotlinx.android.synthetic.main.consultant_item_filter_online.view.* import kotlinx.android.synthetic.main.consultant_item_filter_online.view.*
import kotlinx.android.synthetic.main.consultant_layout_search_content.* import kotlinx.android.synthetic.main.consultant_layout_search_content.*
import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.* import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.*
import org.json.JSONObject import org.json.JSONObject
import java.util.concurrent.Executors import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
@Route(path = "/consult/list") @Route(path = "/consult/list")
class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPresenter>(), class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPresenter>(),
View.OnClickListener, IExpertSearchView, View.OnClickListener, IExpertSearchView,
OnCategoriesSelectedListener, OnSortItemSelectedListener, OnFilterConfirmListener, OnCategoriesSelectedListener, OnSortItemSelectedListener, OnFilterConfirmListener,
SwipeRefreshLayout.OnRefreshListener { SwipeRefreshLayout.OnRefreshListener {
var bottomWordDisposable: Disposable? = null
private lateinit var bottomWordlist: List<FunctionWordBean>
private var searchWord: String? = ""
override fun showImage(url: String?, imgView: ImageView) { override fun showImage(url: String?, imgView: ImageView) {
YDLImageCacheManager.showImage(ExpertSearchActivity@ this, url, imgView) YDLImageCacheManager.showImage(ExpertSearchActivity@ this, url, imgView)
} }
override fun showImage(url: String?, imgView: ImageView, ops: SimpleImageOpConfiger) { override fun showImage(url: String?, imgView: ImageView, ops: SimpleImageOpConfiger) {
YDLImageCacheManager.showImage(ExpertSearchActivity@ this, url, imgView, ops) YDLImageCacheManager.showImage(this, url, imgView, ops)
} }
override fun showImage( override fun showImage(
...@@ -383,7 +391,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -383,7 +391,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
initCategory = mIntent.getStringExtra(EXTRA_CATEGORY) ?: "" initCategory = mIntent.getStringExtra(EXTRA_CATEGORY) ?: ""
initShowType = mIntent.getIntExtra(EXTRA_SHOW_TYPE, 0) initShowType = mIntent.getIntExtra(EXTRA_SHOW_TYPE, 0)
val relatedWord = mIntent.getStringExtra(EXTRA_RELATED_WORD) // 搜索内容的联想词 val relatedWord = mIntent.getStringExtra(EXTRA_RELATED_WORD) // 搜索内容的联想词
val searchWord = mIntent.getStringExtra(EXTRA_SEARCH_WORD) searchWord = mIntent.getStringExtra(EXTRA_SEARCH_WORD)
val isRecommendWords = mIntent.getBooleanExtra(EXTRA_IS_RECCOMMEND_WORD, false) val isRecommendWords = mIntent.getBooleanExtra(EXTRA_IS_RECCOMMEND_WORD, false)
if (!TextUtils.isEmpty(relatedWord)) { // 判断搜索内容的联想词为空,则用搜索词进行搜索 if (!TextUtils.isEmpty(relatedWord)) { // 判断搜索内容的联想词为空,则用搜索词进行搜索
allFilter.searchWord = relatedWord allFilter.searchWord = relatedWord
...@@ -394,7 +402,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -394,7 +402,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
getRouterParam() getRouterParam()
allFilter.showType.key = initShowType allFilter.showType.key = initShowType
if (!TextUtils.isEmpty(initCategory)&&initCategory!="0") { if (!TextUtils.isEmpty(initCategory) && initCategory != "0") {
allFilter.categoryId2List.add(initCategory) allFilter.categoryId2List.add(initCategory)
} }
if (!TextUtils.isEmpty(cateName)) { if (!TextUtils.isEmpty(cateName)) {
...@@ -414,11 +422,11 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -414,11 +422,11 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
LogUtil.e("relatedWord:${relatedWord}") LogUtil.e("relatedWord:${relatedWord}")
if (!TextUtils.isEmpty(searchWord) && !TextUtils.isEmpty(relatedWord) && searchWord != relatedWord) { if (!TextUtils.isEmpty(searchWord) && !TextUtils.isEmpty(relatedWord) && searchWord != relatedWord) {
if (doctorList.size > 0 && doctorList[0].is_head_view) { if (doctorList.size > 0 && doctorList[0].is_head_view) {
doctorList[0] = ExpertServiceItem(true, searchWord, relatedWord) doctorList[0] = ExpertServiceItem(true, searchWord.toString(), relatedWord)
} else if (doctorList.size > 0) { } else if (doctorList.size > 0) {
doctorList.add(0, ExpertServiceItem(true, searchWord, relatedWord)) doctorList.add(0, ExpertServiceItem(true, searchWord.toString(), relatedWord))
} else { } else {
doctorList.add(ExpertServiceItem(true, searchWord, relatedWord)) doctorList.add(ExpertServiceItem(true, searchWord.toString(), relatedWord))
} }
} else { } else {
if (doctorList.size > 0 && doctorList[0].is_head_view) { if (doctorList.size > 0 && doctorList[0].is_head_view) {
...@@ -432,6 +440,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -432,6 +440,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
doctorAdapter.clickCount = 0 doctorAdapter.clickCount = 0
doctorAdapter.setIsRecommendWords(isRecommendWords) doctorAdapter.setIsRecommendWords(isRecommendWords)
doctorAdapter.setEntrance(1) doctorAdapter.setEntrance(1)
getPresenter().fetchFunctionWord(2)
} }
override fun onNewIntent(intent: Intent?) { override fun onNewIntent(intent: Intent?) {
...@@ -511,6 +520,30 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -511,6 +520,30 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
} }
} }
override fun onFunctionWordFetched(wordBean: MutableList<FunctionWordBean>) {
//获取底纹词
bottomWordlist = wordBean
if (bottomWordlist.isNullOrEmpty()) return
if (!searchWord.isNullOrEmpty()) {
tv_search_content.text = searchWord
} else {
if (bottomWordlist.size == 1) {
tv_search_content.text = bottomWordlist[0].word
} else {
bottomWordDisposable = Observable.interval(0, 3, TimeUnit.SECONDS)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
tv_search_content.text =
bottomWordlist[(it % bottomWordlist.size).toInt()].word
}, {
}, {
})
}
}
}
/** /**
* 热门 * 热门
*/ */
...@@ -1559,6 +1592,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -1559,6 +1592,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
mHandler = null mHandler = null
bottomWordDisposable?.dispose()
ConsultAssistantDialogUtils.INSTANCE.expertSearchResetStatus() ConsultAssistantDialogUtils.INSTANCE.expertSearchResetStatus()
} }
} }
...@@ -4,6 +4,7 @@ import android.animation.Animator ...@@ -4,6 +4,7 @@ import android.animation.Animator
import android.animation.AnimatorListenerAdapter import android.animation.AnimatorListenerAdapter
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.animation.PropertyValuesHolder import android.animation.PropertyValuesHolder
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.Typeface import android.graphics.Typeface
import android.os.Handler import android.os.Handler
...@@ -41,6 +42,7 @@ import com.yidianling.common.tools.LogUtil ...@@ -41,6 +42,7 @@ import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.RxImageTool
import com.yidianling.common.tools.ToastUtil import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.adapter.ExpertSearchAdapter import com.yidianling.consultant.adapter.ExpertSearchAdapter
import com.yidianling.consultant.bean.FunctionWordConsultBean
import com.yidianling.consultant.constants.ConsultBIConstants import com.yidianling.consultant.constants.ConsultBIConstants
import com.yidianling.consultant.listener.OnCategoriesSelectedListener import com.yidianling.consultant.listener.OnCategoriesSelectedListener
import com.yidianling.consultant.listener.OnExpertClickListener import com.yidianling.consultant.listener.OnExpertClickListener
...@@ -56,12 +58,17 @@ import com.yidianling.consultant.ui.view.SortPopupWindow ...@@ -56,12 +58,17 @@ import com.yidianling.consultant.ui.view.SortPopupWindow
import com.yidianling.consultant.ui.view.topView.RecommendListView import com.yidianling.consultant.ui.view.topView.RecommendListView
import com.yidianling.home.api.event.HomeModuleTabEvent import com.yidianling.home.api.event.HomeModuleTabEvent
import de.greenrobot.event.EventBus import de.greenrobot.event.EventBus
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.consultant_activity_expert_search_list.* import kotlinx.android.synthetic.main.consultant_activity_expert_search_list.*
import kotlinx.android.synthetic.main.consultant_item_filter_online.view.* import kotlinx.android.synthetic.main.consultant_item_filter_online.view.*
import kotlinx.android.synthetic.main.consultant_layout_search_content.* import kotlinx.android.synthetic.main.consultant_layout_search_content.*
import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.* import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.*
import org.json.JSONObject import org.json.JSONObject
import java.util.concurrent.Executors import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
@Route(path = "/consultant/consultant") @Route(path = "/consultant/consultant")
class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPresenter>(), class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPresenter>(),
...@@ -73,7 +80,8 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -73,7 +80,8 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
var startTime = 0L var startTime = 0L
var endTime = 0L var endTime = 0L
private var mIdssign1: String = "" // 列表埋点咨询师列表id拼接参数 private var mIdssign1: String = "" // 列表埋点咨询师列表id拼接参数
var bottomWordDisposable: Disposable? = null
private lateinit var bottomWordlist: List<FunctionWordBean>
override fun layoutResId(): Int { override fun layoutResId(): Int {
return R.layout.consultant_activity_expert_search_list return R.layout.consultant_activity_expert_search_list
} }
...@@ -145,6 +153,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -145,6 +153,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
const val FROM_FIND_EXPERT = 1 const val FROM_FIND_EXPERT = 1
const val FROM_ONLINE_EXPERT = 2 const val FROM_ONLINE_EXPERT = 2
const val PAGE_SIZE = 15 const val PAGE_SIZE = 15
//列表点击回来不刷新列表 //列表点击回来不刷新列表
var needRefresh = true; var needRefresh = true;
} }
...@@ -197,7 +206,8 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -197,7 +206,8 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
srlContainer.isEnabled = i >= 0 srlContainer.isEnabled = i >= 0
}) })
doctorAdapter = ExpertSearchAdapter(mContext, this, doctorList,object :OnExpertClickListener{ doctorAdapter =
ExpertSearchAdapter(mContext, this, doctorList, object : OnExpertClickListener {
override fun onExpertClick() { override fun onExpertClick() {
needRefresh = false needRefresh = false
} }
...@@ -346,6 +356,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -346,6 +356,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
allFilter.showType.key = initShowType allFilter.showType.key = initShowType
getPresenter().fetchListHead() getPresenter().fetchListHead()
getPresenter().fetchFunctionWord(2)
recommendListView.requestData("") recommendListView.requestData("")
v_loading.visibility = View.VISIBLE v_loading.visibility = View.VISIBLE
...@@ -418,6 +429,26 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -418,6 +429,26 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
} }
} }
@SuppressLint("CheckResult")
override fun onFunctionWordFetched(wordBean: MutableList<FunctionWordBean>) {
//获取底纹词
bottomWordlist = wordBean
if (bottomWordlist.isNullOrEmpty()) return
if (bottomWordlist.size == 1) {
tv_search_content.text = bottomWordlist[0].word
} else {
bottomWordDisposable = Observable.interval(0, 3, TimeUnit.SECONDS)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
tv_search_content.text = bottomWordlist[(it % bottomWordlist.size).toInt()].word
}, {
}, {
})
}
}
/** /**
* 热门 * 热门
*/ */
...@@ -1374,7 +1405,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1374,7 +1405,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
srlContainer.isRefreshing = isShowRefresh!! srlContainer.isRefreshing = isShowRefresh!!
val key = tv_search_content.text.toString() val key = tv_search_content.text.toString()
if (!TextUtils.isEmpty(key.trim())) { if (!TextUtils.isEmpty(key.trim())) {
allFilter.searchWord = key.trim() allFilter.searchWord = null
} else { } else {
allFilter.searchWord = null allFilter.searchWord = null
} }
...@@ -1430,9 +1461,9 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1430,9 +1461,9 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if (needRefresh){ if (needRefresh) {
refresh(false) refresh(false)
}else{ } else {
// //
needRefresh = true needRefresh = true
} }
...@@ -1444,6 +1475,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1444,6 +1475,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
super.onDestroy() super.onDestroy()
EventBus.getDefault().unregister(this) EventBus.getDefault().unregister(this)
mHandler = null mHandler = null
bottomWordDisposable?.dispose()
ConsultAssistantDialogUtils.INSTANCE.resetStatus() ConsultAssistantDialogUtils.INSTANCE.resetStatus()
} }
} }
...@@ -43,6 +43,24 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() { ...@@ -43,6 +43,24 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() {
}) })
} }
// 查询底纹词
@SuppressLint("CheckResult")
fun fetchFunctionWord(type: Int) {
val map = HashMap<String, Any>()
map["type"] = type
SearchApi.getSearchApi()
.searchFunctionWord(map)
.compose(RxLifecycleUtils.bindToLifecycle(mView))//使用 Rxlifecycle,使 Disposable 和 Activity 一起销毁
.compose(RxUtils.resultJavaData())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ resp ->
mView.onFunctionWordFetched(resp)
}, { t ->
HttpErrorUtils.handleError(BaseApp.getApp(), t)
mView.fetchFailed(t.message)
})
}
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
fun fetchListData(allFilter: AllFilter, extras: Extras?) { fun fetchListData(allFilter: AllFilter, extras: Extras?) {
...@@ -53,7 +71,7 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() { ...@@ -53,7 +71,7 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() {
// filter // filter
val filterMap = HashMap<String, Any?>() val filterMap = HashMap<String, Any?>()
// 搜索词 // 搜索词
if (!TextUtils.isEmpty(allFilter.searchWord)){ if (!TextUtils.isEmpty(allFilter.searchWord)) {
filterMap["__keywords"] = allFilter.searchWord filterMap["__keywords"] = allFilter.searchWord
} }
val categoryList = ArrayList<Any>() val categoryList = ArrayList<Any>()
......
...@@ -15,6 +15,8 @@ import androidx.recyclerview.widget.LinearLayoutManager ...@@ -15,6 +15,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.module.GlideApp import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydl_router.manager.YDLRouterParams import com.ydl.ydl_router.manager.YDLRouterParams
import com.ydl.ydlcommon.base.BaseMvpActivity import com.ydl.ydlcommon.base.BaseMvpActivity
...@@ -30,7 +32,9 @@ import com.yidianling.consultant.adapter.SearchWordsAdapter ...@@ -30,7 +32,9 @@ import com.yidianling.consultant.adapter.SearchWordsAdapter
import com.yidianling.consultant.api.IConsultantService import com.yidianling.consultant.api.IConsultantService
import com.yidianling.consultant.bean.* import com.yidianling.consultant.bean.*
import com.yidianling.consultant.constants.ConsultBIConstants import com.yidianling.consultant.constants.ConsultBIConstants
import com.yidianling.consultant.constants.ConsultBIConstants.ConsultEvent.Companion.SEARCH_BANNERWORD_CLICK
import com.yidianling.consultant.contract.IHotSearchContract import com.yidianling.consultant.contract.IHotSearchContract
import com.yidianling.consultant.model.bean.FunctionWordBean
import com.yidianling.consultant.modular.utils.ConsultAssistantEntryUtils import com.yidianling.consultant.modular.utils.ConsultAssistantEntryUtils
import com.yidianling.consultant.modular.utils.TempH5RouteUtils import com.yidianling.consultant.modular.utils.TempH5RouteUtils
import com.yidianling.consultant.presenter.HotSearchPresenterImpl import com.yidianling.consultant.presenter.HotSearchPresenterImpl
...@@ -40,14 +44,20 @@ import kotlinx.android.synthetic.main.consultant_item_expert_hot_search.view.* ...@@ -40,14 +44,20 @@ import kotlinx.android.synthetic.main.consultant_item_expert_hot_search.view.*
@Route(path = "/consult/hot_search") @Route(path = "/consult/hot_search")
class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchContract.Presenter>(), class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchContract.Presenter>(),
IHotSearchContract.View { IHotSearchContract.View {
private lateinit var searchWordsAdapter: SearchWordsAdapter private lateinit var searchWordsAdapter: SearchWordsAdapter
private val searchSuggestList: ArrayList<SearchSuggestListBean> = ArrayList() private val searchSuggestList: ArrayList<SearchSuggestListBean> = ArrayList()
private var mSearchContent: String = "" private var mSearchContent: String = ""
private val CACHE_CONSULT_SEARCH_HISTORY_DATA = "cache_consult_search_history_data"
private val HOT_SEARCH_DOCTOR_NAME = "hot_search_doctor_name"
private var historyList: FixSizeLinkedList<String> = FixSizeLinkedList(15) private var historyList: FixSizeLinkedList<String> = FixSizeLinkedList(15)
private val bannerList = ArrayList<String>() private val bannerList = ArrayList<String>()
companion object {
private const val CACHE_CONSULT_SEARCH_HISTORY_DATA = "cache_consult_search_history_data"
private const val HOT_SEARCH_DOCTOR_NAME = "hot_search_doctor_name"
private const val JUMP_WORD = "jump_word"
}
//历史搜索内容的最大宽度 //历史搜索内容的最大宽度
private var maxWidth: Int = 0 private var maxWidth: Int = 0
...@@ -82,7 +92,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -82,7 +92,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
private fun getDataFromIntent() { private fun getDataFromIntent() {
val doctorName = intent.getStringExtra(HOT_SEARCH_DOCTOR_NAME) val doctorName = intent.getStringExtra(HOT_SEARCH_DOCTOR_NAME)
if (!TextUtils.isEmpty(doctorName)) { if (!TextUtils.isEmpty(doctorName)) {
etSearch.setText(doctorName) etSearch.hint = doctorName
iv_delete_icon.visibility = View.VISIBLE iv_delete_icon.visibility = View.VISIBLE
} }
} }
...@@ -109,11 +119,20 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -109,11 +119,20 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
if (TextUtils.isEmpty(relatedWords) && !TextUtils.isEmpty(searchSuggestList[0].suggest_content)) { if (TextUtils.isEmpty(relatedWords) && !TextUtils.isEmpty(searchSuggestList[0].suggest_content)) {
relatedWords = searchSuggestList[0].suggest_content relatedWords = searchSuggestList[0].suggest_content
} }
if (searchSuggestList?.get(0)?.suggest_types?.contains(JUMP_WORD)) {
NewH5Activity.start(this, H5Params(searchSuggestList[0].jump_url!!, null))
} else {
if (etSearch.text.toString().isNullOrEmpty()) {
doSearch(etSearch.hint.toString(), relatedWords, isRecommendWords)
} else {
doSearch(etSearch.text.toString(), relatedWords, isRecommendWords) doSearch(etSearch.text.toString(), relatedWords, isRecommendWords)
}
}
} else { } else {
val searchWords = etSearch.text.toString() val searchWords = etSearch.text.toString()
if (TextUtils.isEmpty(searchWords)) { if (TextUtils.isEmpty(searchWords)) {
doSearch(searchWords, "", isRecommendWords) getSearchWords(etSearch.hint.toString(), true)
} else { } else {
getSearchWords(etSearch.text.toString(), true) getSearchWords(etSearch.text.toString(), true)
} }
...@@ -164,7 +183,15 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -164,7 +183,15 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
relatedWords = searchSuggestList[position].suggest_content relatedWords = searchSuggestList[position].suggest_content
} }
} }
doSearch(searchSuggestList[position].suggest_content, relatedWords, isRecommendWords) if (searchSuggestList[position].suggest_types.contains(JUMP_WORD)) {
NewH5Activity.start(this, H5Params(searchSuggestList[position].jump_url!!, null))
} else {
doSearch(
searchSuggestList[position].suggest_content,
relatedWords,
isRecommendWords
)
}
// 埋点 // 埋点
ActionCountUtils.baiDuCountSign3( ActionCountUtils.baiDuCountSign3(
...@@ -219,6 +246,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -219,6 +246,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
isClickWords: Boolean isClickWords: Boolean
) { ) {
if (isClickWords) { if (isClickWords) {
//判断 suggest_classify_types 有值则通过 jump_url跳转
// 搜索的关联词 // 搜索的关联词
var relatedWords = "" var relatedWords = ""
var isRecommendWords = false var isRecommendWords = false
...@@ -231,7 +259,27 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -231,7 +259,27 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
relatedWords = searchWordsBean.search_suggests[0].suggest_content relatedWords = searchWordsBean.search_suggests[0].suggest_content
} }
} }
if (!searchWordsBean.search_suggests.isNullOrEmpty() && searchWordsBean.search_suggests.get(
0
).suggest_types.contains(JUMP_WORD)
) {
//将数据增加到历史搜索中
if (!TextUtils.isEmpty(searchContent)) {
historyList.remove(searchContent)
historyList.add(searchContent)
SharedPreferencesEditor.putString(
CACHE_CONSULT_SEARCH_HISTORY_DATA,
Gson().toJson(historyList)
)
}
NewH5Activity.start(
this,
H5Params(searchWordsBean.search_suggests[0].jump_url!!, null)
)
finish()
} else {
doSearch(searchContent, relatedWords, isRecommendWords) doSearch(searchContent, relatedWords, isRecommendWords)
}
} else { } else {
searchSuggestList.clear() searchSuggestList.clear()
if (!searchWordsBean.search_suggests.isNullOrEmpty()) { if (!searchWordsBean.search_suggests.isNullOrEmpty()) {
...@@ -257,7 +305,9 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -257,7 +305,9 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
private fun initData() { private fun initData() {
initHistoryData() initHistoryData()
mPresenter.localData(this) mPresenter.localData(this)
val mapType = HashMap<String, Any>()
mapType["type"] = 1
mPresenter.searchHotWordData(mapType)
if (etSearch.requestFocus()) { if (etSearch.requestFocus()) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val isShowing = imm.showSoftInput(etSearch, InputMethodManager.SHOW_IMPLICIT) val isShowing = imm.showSoftInput(etSearch, InputMethodManager.SHOW_IMPLICIT)
...@@ -276,30 +326,36 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -276,30 +326,36 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
refreshBanner(hotSearchBean.focusList) refreshBanner(hotSearchBean.focusList)
} }
override fun requestFail() { override fun searchHotWordData(wordList: MutableList<FunctionWordBean>) {
refreshBanner(null) //热门词搜索结果
} if (wordList.isEmpty()) {
//刷新 热门搜索
private fun refreshHotSearchData(keywordData: MutableList<HotSearchKeyWordDataBean>?) {
if (null == keywordData || keywordData.isEmpty()) {
llHotSearch.visibility = View.GONE llHotSearch.visibility = View.GONE
return return
} }
llHotSearch.visibility = View.VISIBLE llHotSearch.visibility = View.VISIBLE
flHotSearch.removeAllViews() flHotSearch.removeAllViews()
for (index in keywordData.indices) { for (index in wordList.indices) {
val view = LayoutInflater.from(this) val view = LayoutInflater.from(this)
.inflate(R.layout.consultant_item_expert_hot_search, flHotSearch, false) .inflate(R.layout.consultant_item_expert_hot_search, flHotSearch, false)
view.tvHotSearch.text = keywordData[index].keyword view.tvHotSearch.text = wordList[index].word
view.setOnClickListener { view.setOnClickListener {
getSearchWords(keywordData[index].keyword!!, true) ActionCountUtils.count(SEARCH_BANNERWORD_CLICK, wordList[index].word!!, "热门搜索")
getSearchWords(wordList[index].word!!, true)
} }
flHotSearch.addView(view) flHotSearch.addView(view)
} }
} }
override fun requestFail() {
refreshBanner(null)
}
//刷新 热门搜索
private fun refreshHotSearchData(keywordData: MutableList<HotSearchKeyWordDataBean>?) {
//旧的热门搜索
}
//刷新 本周热门专家 //刷新 本周热门专家
private fun refreshHotExpertData(hotSearchExpert: MutableList<HotSearchPopularDoctorBean>?) { private fun refreshHotExpertData(hotSearchExpert: MutableList<HotSearchPopularDoctorBean>?) {
if (null == hotSearchExpert || hotSearchExpert.isEmpty()) { if (null == hotSearchExpert || hotSearchExpert.isEmpty()) {
...@@ -326,7 +382,12 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -326,7 +382,12 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
} }
} }
view.setOnClickListener { view.setOnClickListener {
getSearchWords(hotSearchExpert[index].name!!, true) ActionCountUtils.count(
SEARCH_BANNERWORD_CLICK,
hotSearchExpert[index].name.toString(),
"本周热门专家"
)
getSearchWords(hotSearchExpert[index].name.toString(), true)
} }
flHotExpert.addView(view) flHotExpert.addView(view)
} }
...@@ -388,6 +449,8 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon ...@@ -388,6 +449,8 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View, IHotSearchCon
break break
} }
view.setOnClickListener { view.setOnClickListener {
//历史搜索
ActionCountUtils.count(SEARCH_BANNERWORD_CLICK, historyStr, "历史搜索")
getSearchWords(historyStr, true) getSearchWords(historyStr, true)
} }
fl_search_history.addView(view) fl_search_history.addView(view)
......
...@@ -3,8 +3,10 @@ package com.yidianling.consultant ...@@ -3,8 +3,10 @@ package com.yidianling.consultant
import android.widget.ImageView import android.widget.ImageView
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydlcommon.mvp.base.IView import com.ydl.ydlcommon.mvp.base.IView
import com.yidianling.consultant.bean.FunctionWordConsultBean
import com.yidianling.consultant.model.bean.ExpertServiceItem import com.yidianling.consultant.model.bean.ExpertServiceItem
import com.yidianling.consultant.model.bean.Extras import com.yidianling.consultant.model.bean.Extras
import com.yidianling.consultant.model.bean.FunctionWordBean
import com.yidianling.consultant.model.bean.HeadData import com.yidianling.consultant.model.bean.HeadData
/** /**
...@@ -16,7 +18,8 @@ interface IExpertSearchView : IView { ...@@ -16,7 +18,8 @@ interface IExpertSearchView : IView {
fun localData() fun localData()
fun onHeadFetched(headData: HeadData?) fun onHeadFetched(headData: HeadData?)
fun onDoctorListFetched(data: MutableList<ExpertServiceItem>, extras: Extras?,curPage:Int) fun onFunctionWordFetched(wordBean: MutableList<FunctionWordBean>)
fun onDoctorListFetched(data: MutableList<ExpertServiceItem>, extras: Extras?, curPage: Int)
fun fetchFailed(msg: String?) fun fetchFailed(msg: String?)
fun fetchListFailed(msg: String?) fun fetchListFailed(msg: String?)
fun fetchListEmpty(msg: String?) fun fetchListEmpty(msg: String?)
......
...@@ -402,8 +402,6 @@ class ExpertSearchAdapter( ...@@ -402,8 +402,6 @@ class ExpertSearchAdapter(
} }
} }
} else if (holder is FooterViewHolder) { } else if (holder is FooterViewHolder) {
LogUtil.e("${listData.size}")
LogUtil.e("${hasMore}")
if (hasMore) { if (hasMore) {
holder.itemView.visibility = View.VISIBLE holder.itemView.visibility = View.VISIBLE
holder.pbLoading.visibility = View.VISIBLE holder.pbLoading.visibility = View.VISIBLE
......
...@@ -8,11 +8,13 @@ data class SearchWordsBean( ...@@ -8,11 +8,13 @@ data class SearchWordsBean(
) )
data class SearchSuggestListBean( data class SearchSuggestListBean(
val id:String, val id: String,
val score:String, val score: String,
val suggest_content:String, val suggest_content: String,
val suggest_relations:ArrayList<String>, val suggest_relations: ArrayList<String>,
val search_count: Int, val search_count: Int,
val suggest_classify_types:ArrayList<String>, val suggest_classify_types: ArrayList<String>?,
val mapping_classify_type_exist:Boolean val mapping_classify_type_exist: Boolean,
val jump_url: String?,
val suggest_types: ArrayList<String>
) )
\ No newline at end of file
...@@ -58,10 +58,16 @@ class ConsultBIConstants { ...@@ -58,10 +58,16 @@ class ConsultBIConstants {
const val YDL_USER_CONSULT_TYPE_CLICK: String = const val YDL_USER_CONSULT_TYPE_CLICK: String =
APP_CONSULT_LIST_PAGE + "ydl_user_consult_type_click"//咨询师顶部ICON 厌学专题、限时特惠、精神心理 APP_CONSULT_LIST_PAGE + "ydl_user_consult_type_click"//咨询师顶部ICON 厌学专题、限时特惠、精神心理
const val POSITION_CONSULT_COUNSELOR_CARD_CLICK="consult_counselor_card_click" // 咨询师列表点击position const val POSITION_CONSULT_COUNSELOR_CARD_CLICK =
const val POSITION_CHOICE_FILTER_CLICK="choice_filter_click" // 热门点击项position "consult_counselor_card_click" // 咨询师列表点击position
const val POSITION_TWO_CATEGORY_CLICK="two_category_click" // 八大类标签选择埋点 const val POSITION_CHOICE_FILTER_CLICK =
const val POSITION_GOODAT_CROWD_CLICK="goodat_crowd_click" // 擅长人群埋点 "choice_filter_click" // 热门点击项position
const val POSITION_TWO_CATEGORY_CLICK =
"two_category_click" // 八大类标签选择埋点
const val POSITION_GOODAT_CROWD_CLICK =
"goodat_crowd_click" // 擅长人群埋点
const val SEARCH_BANNERWORD_CLICK =
"$PART_ID_YDL_USER_MAIN_PAGE|search_bannerword_click" //历史搜索、热门搜索、本周热门专家搜索
} }
} }
class ConsultSearchListEvent { class ConsultSearchListEvent {
......
package com.yidianling.consultant.contract package com.yidianling.consultant.contract
import android.content.Context import android.content.Context
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.mvp.base.IModel import com.ydl.ydlcommon.mvp.base.IModel
import com.ydl.ydlcommon.mvp.base.IPresenter import com.ydl.ydlcommon.mvp.base.IPresenter
import com.ydl.ydlcommon.mvp.base.IView import com.ydl.ydlcommon.mvp.base.IView
import com.yidianling.consultant.bean.HotSearchBean import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.bean.SearchWordsBean import com.yidianling.consultant.bean.SearchWordsBean
import com.yidianling.consultant.model.bean.FunctionWordBean
import io.reactivex.Observable import io.reactivex.Observable
/** /**
...@@ -24,6 +26,11 @@ class IHotSearchContract { ...@@ -24,6 +26,11 @@ class IHotSearchContract {
fun searchDataResponse(hotSearchBean: HotSearchBean) fun searchDataResponse(hotSearchBean: HotSearchBean)
/** /**
* 搜索页请求热门词
*/
fun searchHotWordData(wordList: MutableList<FunctionWordBean>)
/**
* 请求失败 * 请求失败
*/ */
fun requestFail() fun requestFail()
...@@ -31,7 +38,11 @@ class IHotSearchContract { ...@@ -31,7 +38,11 @@ class IHotSearchContract {
/** /**
* 联想词请求成功结果 * 联想词请求成功结果
*/ */
fun getSearchWordsSuccess(searchWordsBean: SearchWordsBean,searchContent:String,isClickWords:Boolean) fun getSearchWordsSuccess(
searchWordsBean: SearchWordsBean,
searchContent: String,
isClickWords: Boolean
)
} }
interface Presenter : IPresenter<View> { interface Presenter : IPresenter<View> {
...@@ -46,9 +57,14 @@ class IHotSearchContract { ...@@ -46,9 +57,14 @@ class IHotSearchContract {
fun searchData() fun searchData()
/** /**
* 搜索页请求热门词
*/
fun searchHotWordData(map: HashMap<String, Any>)
/**
* 获取联想词 * 获取联想词
*/ */
fun getSearchWords(map:HashMap<String,Any>,searchContent:String,isClickWords:Boolean) fun getSearchWords(map: HashMap<String, Any>, searchContent: String, isClickWords: Boolean)
} }
interface Model : IModel { interface Model : IModel {
...@@ -60,6 +76,11 @@ class IHotSearchContract { ...@@ -60,6 +76,11 @@ class IHotSearchContract {
/** /**
* 获取到联想词 * 获取到联想词
*/ */
fun getSearchWords(map:HashMap<String,Any>): Observable<SearchWordsBean> fun getSearchWords(map: HashMap<String, Any>): Observable<SearchWordsBean>
/**
* 搜索页请求热门词
*/
fun searchHotWordData(map: HashMap<String, Any>): Observable<BaseAPIResponse<MutableList<FunctionWordBean>>>
} }
} }
\ No newline at end of file
...@@ -3,10 +3,13 @@ package com.yidianling.consultant.http.hotsearch ...@@ -3,10 +3,13 @@ package com.yidianling.consultant.http.hotsearch
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.RxUtils import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlnet.YDLHttpUtils import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.consultant.bean.FunctionWordConsultBean
import com.yidianling.consultant.bean.HotSearchBean import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.bean.HotSearchKeyWordDataBean
import com.yidianling.consultant.bean.SearchWordsBean import com.yidianling.consultant.bean.SearchWordsBean
import com.yidianling.consultant.http.ExpertSearchParam import com.yidianling.consultant.http.ExpertSearchParam
import com.yidianling.consultant.model.SearchApi import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.model.bean.FunctionWordBean
import io.reactivex.Observable import io.reactivex.Observable
/** /**
...@@ -48,6 +51,10 @@ class HotSearchHttpImpl : IHotSearchHttp { ...@@ -48,6 +51,10 @@ class HotSearchHttpImpl : IHotSearchHttp {
} }
} }
override fun searchHotWordData(map: HashMap<String, Any>): Observable<BaseAPIResponse<MutableList<FunctionWordBean>>> {
return getSearchApi().searchFunctionWord(map)
}
override fun getSearchWords(map: HashMap<String, Any>): Observable<BaseAPIResponse<SearchWordsBean>> { override fun getSearchWords(map: HashMap<String, Any>): Observable<BaseAPIResponse<SearchWordsBean>> {
return getSearchApi().getSearchWords(map) return getSearchApi().getSearchWords(map)
} }
......
...@@ -3,6 +3,7 @@ package com.yidianling.consultant.http.hotsearch ...@@ -3,6 +3,7 @@ package com.yidianling.consultant.http.hotsearch
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.consultant.bean.HotSearchBean import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.bean.SearchWordsBean import com.yidianling.consultant.bean.SearchWordsBean
import com.yidianling.consultant.model.bean.FunctionWordBean
import io.reactivex.Observable import io.reactivex.Observable
/** /**
...@@ -12,14 +13,19 @@ import io.reactivex.Observable ...@@ -12,14 +13,19 @@ import io.reactivex.Observable
* @Company 壹点灵 * @Company 壹点灵
* @date 2018/7/26 * @date 2018/7/26
*/ */
interface IHotSearchHttp{ interface IHotSearchHttp {
/** /**
* 搜索页请求 * 搜索页请求
*/ */
fun searchData(): Observable<BaseAPIResponse<HotSearchBean>> fun searchData(): Observable<BaseAPIResponse<HotSearchBean>>
/** /**
* 搜索页请求热门词
*/
fun searchHotWordData(map: HashMap<String, Any>): Observable<BaseAPIResponse<MutableList<FunctionWordBean>>>
/**
* 搜索联想词请求 * 搜索联想词请求
*/ */
fun getSearchWords(map:HashMap<String,Any>): Observable<BaseAPIResponse<SearchWordsBean>> fun getSearchWords(map: HashMap<String, Any>): Observable<BaseAPIResponse<SearchWordsBean>>
} }
\ No newline at end of file
package com.yidianling.consultant.model package com.yidianling.consultant.model
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.RxUtils import com.ydl.ydlcommon.data.http.RxUtils
import com.yidianling.consultant.bean.HotSearchBean import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.bean.SearchWordsBean import com.yidianling.consultant.bean.SearchWordsBean
import com.yidianling.consultant.contract.IHotSearchContract import com.yidianling.consultant.contract.IHotSearchContract
import com.yidianling.consultant.http.hotsearch.HotSearchDataManager import com.yidianling.consultant.http.hotsearch.HotSearchDataManager
import com.yidianling.consultant.model.bean.FunctionWordBean
import io.reactivex.Observable import io.reactivex.Observable
/** /**
...@@ -14,12 +16,16 @@ import io.reactivex.Observable ...@@ -14,12 +16,16 @@ import io.reactivex.Observable
* @Company 壹点灵 * @Company 壹点灵
* @date 2018/7/26 * @date 2018/7/26
*/ */
class HotSearchModelImpl : IHotSearchContract.Model{ class HotSearchModelImpl : IHotSearchContract.Model {
override fun searchData(): Observable<HotSearchBean> { override fun searchData(): Observable<HotSearchBean> {
return HotSearchDataManager.getHttp().searchData().compose(RxUtils.resultJavaData()) return HotSearchDataManager.getHttp().searchData().compose(RxUtils.resultJavaData())
} }
override fun getSearchWords(map:HashMap<String,Any>): Observable<SearchWordsBean> { override fun getSearchWords(map: HashMap<String, Any>): Observable<SearchWordsBean> {
return HotSearchDataManager.getHttp().getSearchWords(map).compose(RxUtils.resultJavaData()) return HotSearchDataManager.getHttp().getSearchWords(map).compose(RxUtils.resultJavaData())
} }
override fun searchHotWordData(map: HashMap<String, Any>): Observable<BaseAPIResponse<MutableList<FunctionWordBean>>> {
return HotSearchDataManager.getHttp().searchHotWordData(map)
}
} }
\ No newline at end of file
...@@ -6,11 +6,9 @@ import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA ...@@ -6,11 +6,9 @@ import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.BaseResponse import com.ydl.ydlcommon.data.http.BaseResponse
import com.ydl.ydlnet.YDLHttpUtils import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.consultant.bean.ExpertSearchTopShowBean import com.yidianling.consultant.bean.*
import com.yidianling.consultant.bean.GuideBean
import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.bean.SearchWordsBean
import com.yidianling.consultant.model.bean.ExpertBean import com.yidianling.consultant.model.bean.ExpertBean
import com.yidianling.consultant.model.bean.FunctionWordBean
import com.yidianling.consultant.model.bean.HeadData import com.yidianling.consultant.model.bean.HeadData
import io.reactivex.Observable import io.reactivex.Observable
import retrofit2.http.* import retrofit2.http.*
...@@ -43,13 +41,24 @@ interface SearchApi { ...@@ -43,13 +41,24 @@ interface SearchApi {
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA) @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun searchConditions(@Query("cateSource") cateSource: Int): Observable<BaseAPIResponse<HeadData>> fun searchConditions(@Query("cateSource") cateSource: Int): Observable<BaseAPIResponse<HeadData>>
//查询功能词、底纹词
//(1热门词,2底纹词,3跳转词)
@POST("function/word/queryList")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun searchFunctionWord(@Body map: Map<String, @JvmSuppressWildcards Any>): Observable<BaseAPIResponse<MutableList<FunctionWordBean>>>
//查询功能词、底纹词
//(1热门词,2底纹词,3跳转词)
@POST("function/word/queryList")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun searchFunctionWordApi(@Body map: Map<String, @JvmSuppressWildcards Any>): Observable<BaseAPIResponse<MutableList<FunctionWordConsultBean>>>
/** /**
* 新咨询师列表接口(包含搜索、筛选咨询师) * 新咨询师列表接口(包含搜索、筛选咨询师)
*/ */
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA,"X-App-Id: plough_cloud") @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA, "X-App-Id: plough_cloud")
@POST("smart-rank/v1/search") @POST("smart-rank/v1/search")
fun getExpertList(@Body map: Map<String,@JvmSuppressWildcards Any>):Observable<BaseAPIResponse<ExpertBean>> fun getExpertList(@Body map: Map<String, @JvmSuppressWildcards Any>): Observable<BaseAPIResponse<ExpertBean>>
/** /**
* 获取搜索联想词 * 获取搜索联想词
......
package com.yidianling.consultant.model.bean
data class FunctionWordBean(
var id: Long?,
var word: String?,
var type: Int?,
var jumpUrl: String?
)
\ No newline at end of file
...@@ -9,14 +9,17 @@ import android.text.TextUtils ...@@ -9,14 +9,17 @@ import android.text.TextUtils
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.utils.SharedPreferencesEditor import com.ydl.ydlcommon.utils.SharedPreferencesEditor
import com.yidianling.common.tools.LogUtil import com.ydl.ydlcommon.utils.remind.HttpErrorUtils
import com.yidianling.consultant.ExpertSearchActivity import com.yidianling.consultant.ExpertSearchActivity
import com.yidianling.consultant.ExpertSearchFragment import com.yidianling.consultant.ExpertSearchFragment
import com.yidianling.consultant.api.IConsultantService import com.yidianling.consultant.api.IConsultantService
import com.yidianling.consultant.bean.GuideBean import com.yidianling.consultant.bean.GuideBean
import com.yidianling.consultant.bean.Keyworks import com.yidianling.consultant.bean.Keyworks
import com.yidianling.consultant.data.ConsultantDataManager import com.yidianling.consultant.data.ConsultantDataManager
import com.yidianling.consultant.OnBottomWordListener
import com.yidianling.consultant.model.SearchApi import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils
import com.yidianling.consultant.modular.utils.ConsultAssistantEntryUtils import com.yidianling.consultant.modular.utils.ConsultAssistantEntryUtils
...@@ -118,14 +121,34 @@ class ConsultantServiceImp : IConsultantService { ...@@ -118,14 +121,34 @@ class ConsultantServiceImp : IConsultantService {
ConsultAssistantEntryUtils.jumpConsultAssistant(activity,location,null) ConsultAssistantEntryUtils.jumpConsultAssistant(activity,location,null)
} }
override fun dueToTypeJumpAutoOrGuide(activity: Activity, location: Int, doctorId: Int,url:String) { override fun dueToTypeJumpAutoOrGuide(
ConsultAssistantEntryUtils.getTypeJump(activity,location,doctorId,url) activity: Activity,
location: Int,
doctorId: Int,
url: String
) {
ConsultAssistantEntryUtils.getTypeJump(activity, location, doctorId, url)
} }
override fun showConfideListDialog(activity: Activity) { override fun showConfideListDialog(activity: Activity) {
ConsultAssistantDialogUtils.INSTANCE.showFromConfideListHome(activity) ConsultAssistantDialogUtils.INSTANCE.showFromConfideListHome(activity)
} }
@SuppressLint("CheckResult")
override fun getbottomWord(type: Int, listener: OnBottomWordListener) {
val map = hashMapOf("type" to type)
SearchApi.getSearchApi()
.searchFunctionWordApi(map)
.compose(RxUtils.resultJavaData())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ resp ->
listener.onBottomWord(resp)
}, { t ->
HttpErrorUtils.handleError(BaseApp.getApp(), t)
})
}
override fun resetConsultAssistantDialogStatus() { override fun resetConsultAssistantDialogStatus() {
ConsultAssistantDialogUtils.INSTANCE.resetStatus() ConsultAssistantDialogUtils.INSTANCE.resetStatus()
} }
......
...@@ -4,6 +4,7 @@ import android.annotation.SuppressLint ...@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.text.TextUtils import android.text.TextUtils
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.ThrowableConsumer import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.mvp.base.BasePresenter import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.ydl.ydlcommon.utils.RxLifecycleUtils import com.ydl.ydlcommon.utils.RxLifecycleUtils
...@@ -13,6 +14,8 @@ import com.yidianling.common.tools.ToastUtil ...@@ -13,6 +14,8 @@ import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.bean.HotSearchBean import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.contract.IHotSearchContract import com.yidianling.consultant.contract.IHotSearchContract
import com.yidianling.consultant.model.HotSearchModelImpl import com.yidianling.consultant.model.HotSearchModelImpl
import com.yidianling.consultant.model.bean.FunctionWordBean
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
...@@ -77,14 +80,32 @@ class HotSearchPresenterImpl : BasePresenter<IHotSearchContract.View, IHotSearch ...@@ -77,14 +80,32 @@ class HotSearchPresenterImpl : BasePresenter<IHotSearchContract.View, IHotSearch
} }
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
override fun getSearchWords(map:HashMap<String,Any>,searchContent:String,isClickWords:Boolean) { override fun searchHotWordData(map: HashMap<String, Any>) {
mModel.searchHotWordData(map).compose(RxLifecycleUtils.bindToLifecycle(mView!!))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer {
mView.searchHotWordData(it.data)
}, object : ThrowableConsumer() {
override fun accept(msg: String) {
mView.requestFail()
}
})
}
@SuppressLint("CheckResult")
override fun getSearchWords(
map: HashMap<String, Any>,
searchContent: String,
isClickWords: Boolean
) {
mModel.getSearchWords(map) mModel.getSearchWords(map)
// .debounce(500L, TimeUnit.MILLISECONDS) // .debounce(500L, TimeUnit.MILLISECONDS)
.compose(RxLifecycleUtils.bindToLifecycle(mView)) .compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer { .subscribe(Consumer {
mView.getSearchWordsSuccess(it,searchContent,isClickWords) mView.getSearchWordsSuccess(it, searchContent, isClickWords)
}, object : ThrowableConsumer() { }, object : ThrowableConsumer() {
override fun accept(msg: String) { override fun accept(msg: String) {
ToastUtil.toastShort(msg) ToastUtil.toastShort(msg)
......
...@@ -22,7 +22,9 @@ import com.ydl.ydlcommon.utils.StatusBarUtils ...@@ -22,7 +22,9 @@ import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.Utils import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.consultant.OnBottomWordListener
import com.yidianling.consultant.api.IConsultantService import com.yidianling.consultant.api.IConsultantService
import com.yidianling.consultant.bean.FunctionWordConsultBean
import com.yidianling.home.R import com.yidianling.home.R
import com.yidianling.home.adapter.YdlHomeAdapter import com.yidianling.home.adapter.YdlHomeAdapter
import com.yidianling.home.constants.HomeBIConstants import com.yidianling.home.constants.HomeBIConstants
...@@ -37,9 +39,14 @@ import com.yidianling.home.presenter.HomePresenterImpl ...@@ -37,9 +39,14 @@ import com.yidianling.home.presenter.HomePresenterImpl
import com.yidianling.home.ui.view.CouponDialog import com.yidianling.home.ui.view.CouponDialog
import com.yidianling.im.api.service.IImService import com.yidianling.im.api.service.IImService
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.xlzx.home_fragment_home_module.* 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_content.*
import kotlinx.android.synthetic.xlzx.home_layout_home_module_input.* import kotlinx.android.synthetic.xlzx.home_layout_home_module_input.*
import java.util.concurrent.TimeUnit
import kotlin.properties.Delegates import kotlin.properties.Delegates
...@@ -86,6 +93,8 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>() ...@@ -86,6 +93,8 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>()
private var isFromCreate: Boolean = true private var isFromCreate: Boolean = true
var startTime = System.currentTimeMillis() var startTime = System.currentTimeMillis()
var endTime by Delegates.notNull<Long>() var endTime by Delegates.notNull<Long>()
private lateinit var bottomWordlist: MutableList<FunctionWordConsultBean>
var bottomWordDisposable: Disposable? = null
override fun layoutResId(): Int { override fun layoutResId(): Int {
return R.layout.home_fragment_home_module return R.layout.home_fragment_home_module
} }
...@@ -100,6 +109,7 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>() ...@@ -100,6 +109,7 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>()
homeEvent = HomeImpl(mActivity!!, this) homeEvent = HomeImpl(mActivity!!, this)
initView() initView()
initAdapter() initAdapter()
getBottomWord()
} }
private fun initAdapter() { private fun initAdapter() {
...@@ -126,7 +136,7 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>() ...@@ -126,7 +136,7 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>()
) )
home_swipe_refresh_layout.setProgressViewOffset(false, 0, 200) home_swipe_refresh_layout.setProgressViewOffset(false, 0, 200)
home_swipe_refresh_layout.isEnabled = true home_swipe_refresh_layout.isEnabled = true
etSearch.setOnClickListener { homeEvent?.searchTvClick("") } etSearch.setOnClickListener { homeEvent?.searchTvClick(etSearch.hint.toString()) }
home_page_xiaoyi.setOnClickListener { home_page_xiaoyi.setOnClickListener {
activity?.let { activity?.let {
...@@ -377,4 +387,33 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>() ...@@ -377,4 +387,33 @@ class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterImpl>()
showConsultAssistantDialog() showConsultAssistantDialog()
} }
} }
private fun getBottomWord() {
ModularServiceManager.provide(IConsultantService::class.java)
.getbottomWord(2, object : OnBottomWordListener {
override fun onBottomWord(wordList: MutableList<FunctionWordConsultBean>) {
bottomWordlist = wordList
if (bottomWordlist.isNullOrEmpty()) return
if (bottomWordlist.size == 1) {
etSearch.hint = bottomWordlist[0].word
} else {
if (bottomWordDisposable != null) {
bottomWordDisposable?.dispose()
} else {
bottomWordDisposable = Observable.interval(0, 3, TimeUnit.SECONDS)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
etSearch.hint =
bottomWordlist[(it % bottomWordlist.size).toInt()].word
}, {
}, {
})
}
}
}
})
}
} }
\ No newline at end of file
...@@ -26,7 +26,9 @@ import com.ydl.ydlcommon.base.BaseMvpFragment ...@@ -26,7 +26,9 @@ import com.ydl.ydlcommon.base.BaseMvpFragment
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.* import com.ydl.ydlcommon.utils.*
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.yidianling.consultant.OnBottomWordListener
import com.yidianling.consultant.api.IConsultantService import com.yidianling.consultant.api.IConsultantService
import com.yidianling.consultant.bean.FunctionWordConsultBean
import com.yidianling.home.R import com.yidianling.home.R
import com.yidianling.home.adapter.YdlHomeAdapter import com.yidianling.home.adapter.YdlHomeAdapter
import com.yidianling.home.constants.HomeBIConstants import com.yidianling.home.constants.HomeBIConstants
...@@ -42,10 +44,15 @@ import com.yidianling.home.ui.view.CouponDialog ...@@ -42,10 +44,15 @@ import com.yidianling.home.ui.view.CouponDialog
import com.yidianling.home.ui.view.HomeSpaceItemDecoration import com.yidianling.home.ui.view.HomeSpaceItemDecoration
import com.yidianling.home.utils.HomeAnimUtils import com.yidianling.home.utils.HomeAnimUtils
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.ydl.home_fragment.* import kotlinx.android.synthetic.ydl.home_fragment.*
import kotlinx.android.synthetic.ydl.home_fragment.tab_layout import kotlinx.android.synthetic.ydl.home_fragment.tab_layout
import kotlinx.android.synthetic.ydl.home_muse_view.* import kotlinx.android.synthetic.ydl.home_muse_view.*
import kotlinx.android.synthetic.ydl.home_muse_view.view.* import kotlinx.android.synthetic.ydl.home_muse_view.view.*
import java.util.concurrent.TimeUnit
import kotlin.properties.Delegates import kotlin.properties.Delegates
...@@ -99,13 +106,15 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -99,13 +106,15 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
open var searchText: String = "" open var searchText: String = ""
open var doctorName: String = "" open var doctorName: String = ""
var startTime =0L var startTime = 0L
var endTime =0L var endTime = 0L
/** /**
* 如果是第一次加载,则调用所有接口进行刷新,否则,只调用咨询和倾诉接口 * 如果是第一次加载,则调用所有接口进行刷新,否则,只调用咨询和倾诉接口
*/ */
private var isFromCreate: Boolean = true private var isFromCreate: Boolean = true
private lateinit var bottomWordlist: MutableList<FunctionWordConsultBean>
var bottomWordDisposable: Disposable? = null
override fun layoutResId(): Int { override fun layoutResId(): Int {
return R.layout.home_fragment return R.layout.home_fragment
...@@ -122,6 +131,7 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -122,6 +131,7 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
open fun initHomeEvent() { open fun initHomeEvent() {
homeEvent = HomeImpl(mActivity, this) homeEvent = HomeImpl(mActivity, this)
getBottomWord()
} }
private fun initAdapter() { private fun initAdapter() {
...@@ -173,17 +183,17 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -173,17 +183,17 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
} }
open fun initSearchBar() { open fun initSearchBar() {
if (!TextUtils.isEmpty(doctorName)) { // if (!TextUtils.isEmpty(doctorName)) {
searchText = doctorName // searchText = doctorName
} // }
home_tv.setOnClickListener { home_tv.setOnClickListener {
homeEvent?.searchTvClick(searchText) homeEvent?.searchTvClick(home_tv.text.toString())
} }
iv_search_icon.setOnClickListener { iv_search_icon.setOnClickListener {
homeEvent?.searchTvClick(searchText) homeEvent?.searchTvClick(searchText)
} }
home_tv.text = searchText // home_tv.text = searchText
} }
/** /**
...@@ -228,25 +238,11 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -228,25 +238,11 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
} }
override fun startAnim() { override fun startAnim() {
HomeAnimUtils.startAnim(mContext, 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() { override fun endAnim() {
HomeAnimUtils.endAnim(mContext, 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 { override fun getSearchContent(): String {
...@@ -515,6 +511,35 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -515,6 +511,35 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
.showConsultAssistantDialog(mActivity) .showConsultAssistantDialog(mActivity)
} }
private fun getBottomWord() {
ModularServiceManager.provide(IConsultantService::class.java)
.getbottomWord(2, object : OnBottomWordListener {
override fun onBottomWord(wordList: MutableList<FunctionWordConsultBean>) {
bottomWordlist = wordList
if (bottomWordlist.isNullOrEmpty()) return
if (bottomWordlist.size == 1) {
home_tv.text = bottomWordlist[0].word
} else {
if (bottomWordDisposable != null) {
bottomWordDisposable?.dispose()
} else {
bottomWordDisposable = Observable.interval(0, 3, TimeUnit.SECONDS)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
home_tv.text =
bottomWordlist[(it % bottomWordlist.size).toInt()].word
}, {
}, {
})
}
}
}
})
}
private fun hideConsultAssistantDialog() { private fun hideConsultAssistantDialog() {
ModularServiceManager.provide(IConsultantService::class.java).hideConsultAssistantDialog() ModularServiceManager.provide(IConsultantService::class.java).hideConsultAssistantDialog()
} }
...@@ -662,5 +687,6 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -662,5 +687,6 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
HomeAnimUtils.clear() HomeAnimUtils.clear()
bottomWordDisposable?.dispose()
} }
} }
\ No newline at end of file
...@@ -829,6 +829,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler { ...@@ -829,6 +829,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
super.onReceivedError(view, errorCode, description, failingUrl); super.onReceivedError(view, errorCode, description, failingUrl);
AliYunRichLogsHelper.Companion.getInstance() AliYunRichLogsHelper.Companion.getInstance()
.sendRichLog(AliYunLogConfig.WEB, "onReceivedError---- errorCode: " + errorCode + "----failingUrl:" + failingUrl); .sendRichLog(AliYunLogConfig.WEB, "onReceivedError---- errorCode: " + errorCode + "----failingUrl:" + failingUrl);
LogUtil.e("webviewErrorCode:" + errorCode + "description:" + description);
loadFailed = true; loadFailed = true;
tb_title.setTitle("加载中"); tb_title.setTitle("加载中");
if (wv_content != null) { if (wv_content != null) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment