CourseSearchActicity.kt 9.51 KB
Newer Older
严久程 committed
1 2
package com.yidianling.course.courseSearch

严久程 committed
3
import android.annotation.SuppressLint
严久程 committed
4 5 6 7 8 9 10
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import android.util.Log
import android.view.View
import android.view.WindowManager
import android.widget.ImageView
import com.alibaba.android.arouter.facade.annotation.Route
严久程 committed
11 12
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
严久程 committed
13 14 15
import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.listener.YDLImageRecyclerOnScrollListener
import com.ydl.ydl_image.manager.YDLImageCacheManager
严久程 committed
16 17
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.bean.ShareData
18
import com.ydl.ydlcommon.bean.StatusBarOptions
严久程 committed
19 20
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.router.IYDLRouterConstant
严久程 committed
21
import com.yidianling.common.tools.RxKeyboardTool
严久程 committed
22 23 24
import com.yidianling.common.tools.ToastUtil
import com.yidianling.course.CourseConstants
import com.yidianling.course.R
严久程 committed
25
import com.yidianling.course.bean.Course
严久程 committed
26 27
import com.yidianling.course.courseSearch.http.CourseSearchApiUtils
import com.yidianling.course.courseSearch.view.ICourseSearchView
严久程 committed
28
import com.yidianling.course.widget.SearchBarView
严久程 committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_course_search.*
import org.json.JSONException
import org.json.JSONObject

/**
 * @author <a href="https://www.jianshu.com/u/c1e5310dd724">xujian</a>
 * @描述: 课程搜索页面
 * @Copyright Copyright (c) 2019
 * @Company 壹点灵
 * @date 2019/01/07
 */
@Route(path = "/course/search")
class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, ICourseSearchView {

    private var inputString: String = ""
    private var nowPage = 1
    private var courseList: ArrayList<Course> = ArrayList()
    private val ROUTER_PARAMS = "routerParam"

    private var courseSearchAdapter: CourseSearchAdapter? = null
    private var courseSearchAdapterWrapper: CourseSearchAdapterWrapper? = null

54 55 56
    override fun getStatusViewOptions(): StatusBarOptions {
        return StatusBarOptions(isAddStatusView = true, statusBarDarkMode = true)
    }
严久程 committed
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
    override fun layoutResId(): Int {
        return R.layout.activity_course_search
    }

    override fun initDataAndEvent() {

//        showUnusualView("请输入要搜索的内容")
        getParam()
        initBackBtn()
        initSearchBar()
        initSwipeRefreshLayout()
        initRecyclerView()
    }

    /**
     * 获取路由传递的参数
     */
    private fun getParam() {
        if (null == intent || !intent.hasExtra(ROUTER_PARAMS)) {
            return
        }
        //路由传递的入参
        val json = intent.getStringExtra(ROUTER_PARAMS)
        try {
            val jsonObject = JSONObject(json)
            //搜索关键字
            inputString = jsonObject.getString(IYDLRouterConstant.EXTRA_KEYWORD)
            activity_course_search_search_bar_view.setText(inputString)
        } catch (e: JSONException) {
            e.printStackTrace()
        }
    }

    /**
     * 初始化返回按钮
     */
    private fun initBackBtn() {
        activity_course_back_btn.setOnClickListener { finish() }
    }

    /**
     * 初始化顶部搜索框并监听键盘搜索按钮
     */
    private fun initSearchBar() {
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)

严久程 committed
103 104 105 106 107 108
        activity_course_search_search_bar_view.initBarType(
            SearchBarView.ENABLE_INPUT,
            object : SearchBarView.SearchCallBack {
                override fun cloase() {
                    finish()
                }
严久程 committed
109

严久程 committed
110 111 112
                override fun clickSearchBtn(str: String) {
                    inputString = str
                    if (TextUtils.isEmpty(str)) {
严久程 committed
113
//                    showUnusualView("请输入要搜索的内容")
严久程 committed
114 115 116 117
                        ToastUtil.toastShort("请输入要搜索的内容")
                        return
                    }
                    loadCourseList(true)
严久程 committed
118
                }
严久程 committed
119

严久程 committed
120 121 122 123
            })
        activity_course_search_search_bar_view.postDelayed({
            RxKeyboardTool.showSoftInput(this, activity_course_search_search_bar_view.getEditText())
        },500)
严久程 committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
    }

    /**
     * 设置下拉刷新
     */
    private fun initSwipeRefreshLayout() {
        activity_course_search_swipe_refresh_layout.setOnRefreshListener {
            loadCourseList(true)
        }
    }

    /**
     * 初始化列表并监听滑动到底部 footer Item加载更多
     */
    private fun initRecyclerView() {
        if (null == courseSearchAdapterWrapper) {
严久程 committed
140 141
            courseSearchAdapter =
                CourseSearchAdapter(this, CourseSearchActicity@ this, courseList!!)
严久程 committed
142 143 144 145
            courseSearchAdapter!!.setOnItemClickListener(this)

            activity_course_search_recycler.layoutManager = LinearLayoutManager(this)
            courseSearchAdapterWrapper = CourseSearchAdapterWrapper(
严久程 committed
146 147 148 149 150 151 152 153 154 155
                this,
                courseSearchAdapter!!,
                20,
                activity_course_search_recycler
            )
                .setOnLoadMoreListener(object : CourseSearchAdapterWrapper.OnLoadMoreListener {
                    override fun onLoadMore() {
                        loadCourseList(false)
                    }
                })
严久程 committed
156 157
            activity_course_search_recycler.adapter = courseSearchAdapterWrapper
            //滑动监听 图片是否加载
严久程 committed
158 159 160 161 162
            activity_course_search_recycler.addOnScrollListener(
                YDLImageRecyclerOnScrollListener(
                    CourseSearchActicity@ this
                )
            )
严久程 committed
163 164 165 166 167 168 169 170 171 172
            loadCourseList(true)
        }
    }

    /**
     * item点击事件
     */
    override fun onItemClickEvent(position: Int) {
        var courseItem = courseList[position]
        if (null != courseItem) {
严久程 committed
173
            val h5Params = H5Params(CourseConstants.COURSE_DETAIL_H5 + courseItem.id, "课程详情")
严久程 committed
174
            if (null != courseItem.share && !TextUtils.isEmpty(courseItem.share.share_url)) {
严久程 committed
175 176 177 178 179 180
                val shareData = ShareData(
                    courseItem.share.share_url,
                    courseItem.share.title,
                    courseItem.share.cover,
                    courseItem.share.desc
                )
严久程 committed
181 182 183 184 185 186 187 188 189 190 191 192 193 194
                h5Params.shareData = shareData
            }

            NewH5Activity.start(this, h5Params)
        }
    }

    /**
     * 加载图片
     */
    override fun showImage(url: String?, imageView: ImageView, width: Int, height: Int) {
        val sp = SimpleImageOpConfiger()
        sp.heigt = height
        sp.width = width
严久程 committed
195 196
        sp.errorPic = R.drawable.course_default_img
        sp.loadingPic = R.drawable.course_default_img
严久程 committed
197 198 199 200 201 202 203
        YDLImageCacheManager.showImage(CourseSearchActicity@ this, url, imageView, sp)
    }

    /**
     * 根据输入搜索专家课程
     * type true代表首次加载,false代表加载下一页
     */
严久程 committed
204
    @SuppressLint("CheckResult")
严久程 committed
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
    fun loadCourseList(type: Boolean) {
        if (TextUtils.isEmpty(inputString)) {
            activity_course_search_swipe_refresh_layout.isRefreshing = false
            return
        }

        when (type) {
            //如果是首次加载,则当前页面重置为1,数据清空
            true -> {
                nowPage = 1
                activity_course_search_swipe_refresh_layout.isRefreshing = true
            }
            //如果不是首次加载,则页面+1
            false -> {
                nowPage++
            }
        }

        CourseSearchApiUtils.courseSearchList(nowPage, inputString)
严久程 committed
224 225 226
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(Consumer {
严久程 committed
227

严久程 committed
228 229 230 231 232 233
                if (it.data.list.isNotEmpty()) {
                    hideUnusualPage()
                    if (type) {
                        courseList.clear()
                        courseList.addAll(it.data.list)
                        courseSearchAdapterWrapper!!.notifyDataSetChanged()
严久程 committed
234
                    } else {
严久程 committed
235 236
                        courseList.addAll(it.data.list)
                        courseSearchAdapterWrapper!!.insertData()
严久程 committed
237
                    }
严久程 committed
238 239 240 241 242 243 244
                } else {
                    if (!type) {
                        courseSearchAdapterWrapper!!.noMoreData()
                    } else {
                        showUnusualView("没有搜到相关信息,换个关键词看看吧", true)
                    }
                }
严久程 committed
245

严久程 committed
246 247 248 249
                activity_course_search_swipe_refresh_layout.isRefreshing = false
            }, object : ThrowableConsumer() {
                override fun accept(msg: String) {
                    Log.i("testtest", msg)
严久程 committed
250
                    activity_course_search_swipe_refresh_layout.isRefreshing = false
严久程 committed
251 252 253
                    showUnusualView("请检查你的网络设置", false)
                }
            })
严久程 committed
254 255 256 257 258 259 260 261 262
    }

    /**
     * 显示异常页面
     */
    private fun showUnusualView(desc: String, isEmpty: Boolean) {
        if (!TextUtils.isEmpty(desc)) activity_course_search_unusual_layout_desc.text = desc
        activity_course_search_unusual_layout.visibility = View.VISIBLE
        activity_course_search_recycler.visibility = View.GONE
严久程 committed
263
        iv_empty.setImageResource(if (isEmpty) R.drawable.course_ico_img_zixun_empty else R.drawable.course_blank)
严久程 committed
264 265 266 267 268 269 270 271 272 273 274 275
    }

    /**
     * 隐藏异常页面
     */
    fun hideUnusualPage() {
        activity_course_search_unusual_layout.visibility = View.GONE
        activity_course_search_recycler.visibility = View.VISIBLE
    }


}