Commit 1e8f36a5 by 严久程

课程模块

parent e4369ba4
......@@ -60,6 +60,14 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
kapt 'com.alibaba:arouter-compiler:1.2.2'
implementation 'com.jakewharton:butterknife:8.8.1'
api 'com.dou361.ijkplayer-armv5:jjdxm-ijkplayer-armv5:1.0.0'
api 'com.dou361.ijkplayer-arm64:jjdxm-ijkplayer-arm64:1.0.0'
api 'com.dou361.ijkplayer-x86:jjdxm-ijkplayer-x86:1.0.0'
api 'com.dou361.ijkplayer-x86_64:jjdxm-ijkplayer-x86_64:1.0.0'
api('com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.6') {
exclude group: 'com.android.support', module: 'appcompat-v7'
}
api rootProject.ext.dependencies["ydl-user-router"]
if (rootProject.ext.dev_mode){
//开发时使用
......
......@@ -238,7 +238,7 @@ public class CourseListFragment extends BaseFragment implements PtrHandler, Load
emptyTv.setVisibility(View.VISIBLE);
ivEmptyView.setVisibility(View.VISIBLE);
lvContent.setVisibility(View.GONE);
ivEmptyView.setImageResource(R.drawable.blank);
ivEmptyView.setImageResource(R.drawable.course_blank);
emptyTv.setText("还没有相应的课程哦~");
} else {
lvContent.setVisibility(View.VISIBLE);
......
package com.yidianling.course.bean
import com.yidianling.ydlcommon.data.ShareData
import com.ydl.ydlcommon.bean.ShareData
/**
* @author jiucheng
......
......@@ -495,7 +495,7 @@ class CourseListContainerActivity : BaseActivity(), PtrHandler, LoadMoreHandler
lv_content.visibility = View.GONE
tv_course_list_empty_prompt.visibility = View.VISIBLE
iv_course_list_empty_view.visibility = View.VISIBLE
iv_course_list_empty_view.setImageResource(R.drawable.blank)
iv_course_list_empty_view.setImageResource(R.drawable.course_blank)
tv_course_list_empty_prompt.text = "还没有相应的课程哦~"
v_loading.visibility = View.GONE
}
......
......@@ -17,7 +17,8 @@ import android.widget.LinearLayout
import android.widget.TextView
import com.alibaba.android.arouter.facade.annotation.Route
import com.bumptech.glide.Glide
import com.google.android.exoplayer2.ui.PlayerView
import com.dou361.ijkplayer.widget.PlayStateParams
import com.dou361.ijkplayer.widget.PlayerView
import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.utils.PlayProgressUtil
import com.ydl.media.view.PlayTypeEnum
......@@ -31,7 +32,6 @@ import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.router.YdlCommonRouterManager
import com.ydl.ydlcommon.utils.ScreenUtil
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.UMEventUtils
import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.view.BaseViewHolder
import com.ydl.ydlcommon.view.dialog.CommonDialog
......@@ -579,7 +579,7 @@ class CoursePlayActivity : BaseActivity() {
videoView?.onConfigurationChanged(newConfig)
handler.postDelayed({
if (newConfig.screenHeightDp > newConfig.screenWidthDp) {
videoView?.fullScreenView!!.setImageResource(R.drawable.ico_play_float_full)
videoView?.fullScreenView!!.setImageResource(R.drawable.course_ico_play_float_full)
} else {
videoView?.fullScreenView!!.setImageResource(R.drawable.ico_play_minify)
}
......@@ -595,10 +595,17 @@ class CoursePlayActivity : BaseActivity() {
fun showVideoFloatView(): Boolean {
if (play_type == 0) {
if (YDLMusicHelper.isCoursePlaying()) {
YDLMusicHelper.cover = courPlayBean?.courseExtra?.pic
YDLMusicHelper.name = courPlayBean?.courseExtra?.doctorName
// if (YDLMusicHelper.isCoursePlaying()) {
// YDLMusicHelper.cover = courPlayBean?.courseExtra?.pic
// YDLMusicHelper.name = courPlayBean?.courseExtra?.doctorName
// }
if (AudioPlayer.get().isPlaying && PlayerFloatHelper.playingType == PlayTypeEnum.PLAY_TYPE_COURSE) {
AudioPlayer.get().playMusic?.coverPath=courPlayBean?.courseExtra?.pic
AudioPlayer.get().playMusic?.artist=courPlayBean?.courseExtra?.doctorName
}
} else {
if (videoView?.onBackPressed() == true) {
return false
......
......@@ -8,6 +8,7 @@ import com.yidianling.common.tools.RxDeviceTool
import com.yidianling.common.tools.RxNetTool
import com.yidianling.course.bean.CourseExtraBean
import com.yidianling.course.bean.CourseMediaBean
import com.yidianling.course.widget.HPlayView
import com.yidianling.ydlcommon.bean.CourseExtraBean
import com.yidianling.ydlcommon.bean.CourseMediaBean
import com.yidianling.ydlcommon.dialog.CommonDialog
......
......@@ -8,6 +8,9 @@ import android.view.View
import android.widget.RelativeLayout
import com.dou361.ijkplayer.widget.PlayStateParams
import com.dou361.ijkplayer.widget.PlayerView
import com.ydl.media.audio.utils.PlayProgressUtil
import com.ydl.media.view.PlayTypeEnum
import com.ydl.media.view.PlayerFloatHelper
import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.course.R
......@@ -52,7 +55,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
@SuppressLint("InvalidWakeLockTag")
private constructor(context: CoursePlayActivity, playMoudle: Int) : super(context) {
this.playMoudle = playMoudle
View.inflate(context, R.layout.view_course_play_item, this)
View.inflate(context, R.layout.course_view_course_play_item, this)
activity = context
initView()
......@@ -77,7 +80,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
if (isVideoPlaying) {
var time = activity?.videoView?.currentPosition ?: 0
if (time < 3000) return
UtilH.saveProgress(context, videoUrl, time)
PlayProgressUtil.saveProgress(context, videoUrl, time)
}
}
}, 1000, 1000)
......@@ -104,7 +107,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
wakeLock!!.acquire()
}
activity?.videoView?.onResume()
var hisTime1 = UtilH.getProgress(context, videoUrl)
var hisTime1 = PlayProgressUtil.getProgress(context, videoUrl)
activity?.videoView?.seekTo(hisTime1)
}
......@@ -149,14 +152,15 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
}
}
if (canPlay) {
YDLMusicHelper.playingType = YDLMusicHelper.PLAY_TYPE_COURSE
PlayerFloatHelper.playingType=PlayTypeEnum.PLAY_TYPE_COURSE
var url = playList[index].url
url = url.replace("https", "http")
videoUrl = url
var hisTime = UtilH.getProgress(context, url)
var hisTime = PlayProgressUtil.getProgress(context, url)
try {
activity?.videoView = PlayerView(activity)
.setScaleType(PlayStateParams.fitparent)
......@@ -194,7 +198,7 @@ class CoursePlayItemViewVideo : RelativeLayout, PlayViewInterface {
if (what == PlayStateParams.STATE_COMPLETED) {
isVideoPlaying = false
UtilH.saveProgress(this@CoursePlayItemViewVideo.activity, videoUrl, 0)
PlayProgressUtil.saveProgress(this@CoursePlayItemViewVideo.activity, videoUrl, 0)
if (playList.size - 1 > this@CoursePlayItemViewVideo.index) {
//播放下一曲
play(this@CoursePlayItemViewVideo.index + 1)
......
package com.yidianling.course.courseSearch
import android.annotation.SuppressLint
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import android.util.Log
......@@ -7,22 +8,22 @@ import android.view.View
import android.view.WindowManager
import android.widget.ImageView
import com.alibaba.android.arouter.facade.annotation.Route
import com.ydl.base_module.ui.searchbarview.SearchBarView
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.listener.YDLImageRecyclerOnScrollListener
import com.ydl.ydl_image.manager.YDLImageCacheManager
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.bean.ShareData
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.yidianling.common.tools.ToastUtil
import com.yidianling.course.CourseConstants
import com.yidianling.course.R
import com.yidianling.course.coursePlay.moudle.Course
import com.yidianling.course.courseSearch.http.CourseSearchApiUtils
import com.yidianling.course.courseSearch.view.ICourseSearchView
import com.yidianling.ydlcommon.base.BaseActivity
import com.yidianling.ydlcommon.data.ShareData
import com.yidianling.ydlcommon.h5.H5Params
import com.yidianling.ydlcommon.h5.NewH5Activity
import com.yidianling.ydlcommon.http.ThrowableConsumer
import com.yidianling.ydlcommon.router.IYDLRouterConstant
import com.yidianling.course.widget.SearchBarView
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
......@@ -153,7 +154,7 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
override fun onItemClickEvent(position: Int) {
var courseItem = courseList[position]
if (null != courseItem) {
val h5Params = H5Params(CourseConstants.COURSE_DETAIL_H5 + courseItem.id, this.getString(R.string.course_detail))
val h5Params = H5Params(CourseConstants.COURSE_DETAIL_H5 + courseItem.id, "课程详情")
if (null != courseItem.share && !TextUtils.isEmpty(courseItem.share.share_url)) {
val shareData = ShareData(courseItem.share.share_url, courseItem.share.title, courseItem.share.cover, courseItem.share.desc)
h5Params.shareData = shareData
......@@ -170,8 +171,8 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
val sp = SimpleImageOpConfiger()
sp.heigt = height
sp.width = width
sp.errorPic = R.drawable.default_img
sp.loadingPic = R.drawable.default_img
sp.errorPic = R.drawable.course_default_img
sp.loadingPic = R.drawable.course_default_img
YDLImageCacheManager.showImage(CourseSearchActicity@ this, url, imageView, sp)
}
......@@ -179,6 +180,7 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
* 根据输入搜索专家课程
* type true代表首次加载,false代表加载下一页
*/
@SuppressLint("CheckResult")
fun loadCourseList(type: Boolean) {
if (TextUtils.isEmpty(inputString)) {
activity_course_search_swipe_refresh_layout.isRefreshing = false
......@@ -234,7 +236,7 @@ class CourseSearchActivity : BaseActivity(), CourseSearchAdapter.OnItemClick, IC
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
iv_empty.setImageResource(if (isEmpty) R.drawable.ico_img_zixun_empty else R.drawable.blank)
iv_empty.setImageResource(if (isEmpty) R.drawable.course_ico_img_zixun_empty else R.drawable.course_blank)
}
/**
......
package com.yidianling.course.courseSearch.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.course.coursePlay.common.net.NetApiStore
import com.yidianling.course.courseSearch.CourseSearchBean
import com.yidianling.ydlcommon.http.BaseAPIResponse
import com.yidianling.ydlcommon.http.BaseResponse
import com.yidianling.ydlcommon.http.YdlRetrofitUtils
import io.reactivex.Observable
/**
......@@ -20,8 +20,7 @@ class CourseSearchApiUtils {
* 专家课程搜索列表
*/
fun courseSearchList(page:Int, keyWord:String) : Observable<BaseAPIResponse<CourseSearchBean>> {
return YdlRetrofitUtils.getRxRetrofit().newBuilder().baseUrl(YdlRetrofitUtils.SERVER_API_JAVA_URL).build()
.create(CourseSearchListApi::class.java).courseSearchList(page, keyWord)
return YDLHttpUtils.obtainApi(CourseSearchListApi::class.java).courseSearchList(page, keyWord)
}
}
......
package com.yidianling.course.courseSearch.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.course.courseSearch.CourseSearchBean
import com.yidianling.ydlcommon.http.BaseAPIResponse
import io.reactivex.Observable
import retrofit2.http.*
......
package com.yidianling.course.courseSearch.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.course.courseSearch.CourseSearchBean
import com.yidianling.ydlcommon.http.BaseAPIResponse
import com.yidianling.ydlcommon.http.BaseResponse
import io.reactivex.Observable
/**
......
......@@ -3,13 +3,12 @@ package com.yidianling.course.course_special_list.presenter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.yidianling.common.tools.RxNetTool
import com.yidianling.course.course_special_list.bean.CourseSpecialItemBean
import com.yidianling.course.course_special_list.contract.ICourseSpecialListContract
import com.yidianling.course.course_special_list.http.CourseSpecialListParam
import com.yidianling.course.course_special_list.model.CourseSpecialListModelImpl
import com.yidianling.ydlcommon.http.ThrowableConsumer
import com.yidianling.ydlcommon.mvp.RxPresenter
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
......@@ -22,17 +21,9 @@ import io.reactivex.schedulers.Schedulers
* @date 2018/9/18
*/
class CourseSpecialListPresenterImpl (var view: ICourseSpecialListContract.View) :
ICourseSpecialListContract.Presenter{
override fun attachView(view: ICourseSpecialListContract.View) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun detachView() {
TODO("not implemented") //To change body of crea ted functions use File | Settings | File Templates.
}
override fun destroy() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
BasePresenter<ICourseSpecialListContract.View, ICourseSpecialListContract.Model>(),ICourseSpecialListContract.Presenter{
override fun createModel(): ICourseSpecialListContract.Model {
return CourseSpecialListModelImpl()
}
/**
......@@ -77,7 +68,7 @@ class CourseSpecialListPresenterImpl (var view: ICourseSpecialListContract.View)
* @param loadMore 是否为上拉加载更多
*/
private fun requestList(page: Int,loadMore : Boolean){
val disposable = model.specialListRequest(CourseSpecialListParam(page,0))
val disposable = mModel.specialListRequest(CourseSpecialListParam(page,0))
.subscribeOn(Schedulers.io())
.map { it }
.filter { it != null }
......
package com.yidianling.course.widget
import android.app.Activity
import android.os.Handler
import android.view.View
import android.widget.RelativeLayout
import android.widget.SeekBar
import com.bumptech.glide.Glide
import com.yidianling.course.R
import kotlinx.android.synthetic.main.course_play_music_view.view.*
/**
* Created by hgw on 2018/4/28.
*/
class HPlayView : RelativeLayout, YDLMusicPlayer.MusicControlTaker {
var control: HMusicPlayService.MusicController? = null
var listener: HPlayStatusListener? = null
var mHandler: Handler? = null
//seekBar 按下标记
var seekBarIsDown = false
var progress = 0
var mContext: Activity? = null
constructor(context1: Activity?) : super(context1) {
this.mContext = context1
mHandler = Handler()
init()
}
fun init() {
if (mContext == null) return
YDLMusicPlayer.getInstance().setMusicControlTaker(this)
View.inflate(context, R.layout.course_play_music_view, this)
play_icon.setOnClickListener {
if (control?.isPlaying() == true) {
control?.pause()
} else {
control?.start()
}
}
img_gif.setOnClickListener {
if (control?.isPlaying() == false) {
control?.start()
}
}
pro_progress.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
if (p2) {
text_start_time.text = getStringTime(p1)
progress = p1
}
}
override fun onStartTrackingTouch(p0: SeekBar?) {
seekBarIsDown = true
}
override fun onStopTrackingTouch(p0: SeekBar?) {
seekBarIsDown = false
//拖动seekbar时不进行以下操作
if (!seekBarIsDown) {
control?.seekTo(progress)
}
}
})
}
fun showNetNotice(event: () -> Unit) {
ll_net_notice.visibility = View.VISIBLE
img_gif.visibility = View.GONE
iv_net_notice.setOnClickListener {
hideNetNotice()
event()
}
}
fun hideNetNotice() {
ll_net_notice.visibility = View.GONE
img_gif.visibility = View.VISIBLE
}
fun setData(urlLi: ArrayList<MusicInfoBean>): HPlayView {
control?.setData(urlLi)
return this
}
/**
* 后台进入前台view
*/
fun updateView(index: Int) {
if (control?.isPlaying()!!) {
mHandler?.postDelayed({
pro_progress.max = control?.getDuration() ?: 0
text_end_time.text = getStringTime(pro_progress.max)
listener?.onPrepared(control?.getCurrentData(), index)
}, 0)
updateButton()
}
}
/**
* 获取当前播放下标
*/
fun getCurrentIndex(): Int {
return control?.getCurrentIndex() ?: 0
}
/**
* 获取当前播放url
*/
fun getCurrentUrl(): String {
return control?.getCurrentUrl() ?: ""
}
fun play(index: Int) {
updateButton()
YDLMusicHelper.playingType = YDLMusicHelper.PLAY_TYPE_COURSE
YDLMusicHelper.directPlay(index, true)
}
fun setImageBackground(url: String?) {
Glide.with(mContext).load(url).into(img_bg)
}
/**
* 获取播放控制器
*/
fun getPlayControl(): HMusicPlayService.MusicController? {
return control
}
/**
* 设置自动播放下一曲
*/
fun setAutoNext(auto: Boolean) {
control?.setAutoPlayNext(auto)
}
override fun onReceiveControl(control: HMusicPlayService.MusicController) {
this.control = control
setControl1(control)
}
var playStatusListener: PlayStatusListener? = null
private fun setControl1(control: HMusicPlayService.MusicController?) {
control?.setOpenNotifyCation(true)
if (playStatusListener == null) {
playStatusListener = object : PlayStatusListener {
override fun beforeStart(index: Int) {
showBufferLoading(true)
}
override fun onCompletionListener() {
// LogH.d("onCompletionListener")
updateButton()
}
override fun loading() {
// LogH.d("loading")
showBufferLoading(true)
}
override fun onPrepared() {
// LogH.d("onPrepared")
mHandler?.postDelayed({
pro_progress.max = control?.getDuration() ?: 0
text_end_time.text = getStringTime(pro_progress.max)
listener?.onPrepared(control?.getCurrentData(), control?.getCurrentIndex()
?: 0)
}, 0)
}
override fun start() {
// LogH.d("start")
setGifVisibity(true)
}
override fun pause() {
// LogH.d("pause")
setGifVisibity(false)
}
override fun onProgressUpdate(progress: Int) {
mHandler?.postDelayed({
//拖动seekbar时不进行以下操作
if (!seekBarIsDown) {
pro_progress.progress = progress
text_start_time.text = getStringTime(progress)
}
}, 0)
}
override fun OnErrorListener(p1: Int, p2: String) {
// LogH.d("OnErrorListener:$p1 $p2")
setGifVisibity(false)
}
override fun OnBufferingUpdateListener(p1: Int) {
// LogH.d("OnBufferingUpdateListener:$p1")
mHandler?.postDelayed({
pro_progress.secondaryProgress = p1 * pro_progress.max / 100
}, 0)
}
}
YDLMusicPlayer.getInstance().addListener(playStatusListener!!)
}
}
fun showBufferLoading(show: Boolean) {
mHandler?.postDelayed({
if (show) {
if (mContext != null) {
Glide.with(mContext).asGif().load(R.mipmap.loading5).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_play)
} else {
if (mContext != null) {
Glide.with(mContext).asGif().load(R.mipmap.audio_play).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_pause)
}
}, 0)
}
//显示或隐藏播放动画
fun setGifVisibity(show: Boolean) {
if (context == null) return
mHandler?.postDelayed({
if (show) {
if (mContext != null) {
Glide.with(mContext).asGif().load(R.mipmap.audio_play).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_pause)
} else {
if (mContext != null) {
Glide.with(mContext).asBitmap().load(R.drawable.ico_course_bg_pause).into(img_gif)
}
play_icon.setImageResource(R.drawable.ico_course_play)
}
}, 0)
}
//跟新上下音频按钮状态
fun updateButton() {
mHandler?.postDelayed({
if (control?.isPlaying() == true) {
setGifVisibity(true)
}
}, 0)
}
fun getStringTime(time: Int): String {
if (time <= 0) return "00:00"
var min = time / 60000
var ss = (time - min * 60000) / 1000
var mm = "" + min
var SS = "" + ss
if (min < 10) {
mm = "0$mm"
}
if (ss < 10) {
SS = "0$ss"
}
return "$mm:$SS"
}
fun onDestroy() {
mContext = null
mHandler = null
playStatusListener?.let { YDLMusicPlayer.getInstance().removeListener(it) }
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="17dp"
android:height="17dp" />
<stroke android:color="@color/white" android:width="6dp"/>
<solid android:color="@color/color_FFDB26" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="3dp" />
<solid android:color="#C6CACE" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="3dp" />
<solid android:color="#ECF0F1" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="3dp" />
<solid android:color="@color/color_FFDB26" />
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#99000000"
android:startColor="#00000000" />
</shape>
\ No newline at end of file
......@@ -24,7 +24,7 @@
android:layout_centerVertical="true"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:src="@drawable/toolbar_back"/>
android:src="@drawable/course_toolbar_back"/>
<TextView
android:id="@+id/tv_title"
......@@ -43,7 +43,7 @@
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:src="@drawable/toolbar_back"
android:src="@drawable/course_toolbar_back"
android:text="我的课程"
android:textColor="@color/right_text_color"/>
</RelativeLayout>
......
......@@ -13,7 +13,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="19dp"
android:src="@drawable/toolbar_back"
android:src="@drawable/course_toolbar_back"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title" />
......
......@@ -12,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="15dp"
android:src="@drawable/toolbar_back"
android:src="@drawable/course_toolbar_back"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title" />
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--<include-->
<!--layout="@layout/base_module_title_bar"/>-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/color_FFFFFF"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="15dp">
<ImageView
android:id="@+id/activity_course_back_btn"
android:layout_width="13dp"
android:layout_height="22dp"
android:src="@drawable/course_toolbar_back"
android:visibility="gone"/>
<com.yidianling.course.widget.SearchBarView
android:id="@+id/activity_course_search_search_bar_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/activity_course_search_unusual_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_FFFFFF"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="invisible">
<ImageView
android:id="@+id/iv_empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="51dp"
android:src="@drawable/course_blank"/>
<TextView
android:id="@+id/activity_course_search_unusual_layout_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:textColor="@color/color_ACACAC"/>
</LinearLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/activity_course_search_swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_course_search_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"/>
</android.support.v4.widget.SwipeRefreshLayout>
</FrameLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="211dp"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rela_play"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
tools:background="@color/main_theme" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.5"
android:background="@color/black"
android:scaleType="fitXY" />
<ImageView
android:id="@+id/img_gif"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_centerInParent="true"
android:src="@drawable/course_audio_play" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="15dp">
<ImageView
android:id="@+id/play_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="3dp"
android:padding="14dp"
android:scaleType="centerCrop"
android:src="@drawable/course_ico_course_play" />
<SeekBar
android:id="@+id/pro_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_marginLeft="-3dp"
android:layout_toLeftOf="@+id/text_start_time"
android:layout_toRightOf="@+id/play_icon"
android:maxHeight="2dp"
android:minHeight="2dp"
android:progressDrawable="@drawable/course_layer_progress"
android:thumb="@drawable/course_dot_seekbar"
tools:progress="0" />
<TextView
android:id="@+id/text_start_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/tv_line"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="11sp" />
<TextView
android:id="@+id/tv_line"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/text_end_time"
android:gravity="center"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:text="/"
android:textColor="@color/white"
android:textSize="11sp" />
<TextView
android:id="@+id/text_end_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="11sp" />
</RelativeLayout>
<!-- 网络提示-->
<LinearLayout
android:id="@+id/ll_net_notice"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#33000000"
android:clickable="true"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="正在使用非Wi-Fi网络,播放将产生流量费用"
android:textColor="@android:color/white"
android:textSize="14sp" />
<ImageView
android:id="@+id/iv_net_notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:src="@drawable/ico_spfc_play" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/app_video_box"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:orientation="vertical">
<com.dou361.ijkplayer.widget.IjkVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/ll_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:orientation="vertical">
<!-- 封面显示-->
<ImageView
android:id="@+id/iv_trumb"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:visibility="visible" />
</LinearLayout>
<!--重新播放-->
<LinearLayout
android:id="@+id/app_video_replay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#33000000"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<!-- 播放状态-->
<TextView
android:id="@+id/app_video_status_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/small_problem"
android:textColor="@android:color/white"
android:textSize="14dp" />
<ImageView
android:id="@+id/app_video_replay_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="8dp"
android:src="@drawable/simple_player_circle_outline_white_36dp" />
</LinearLayout>
<!-- 网络提示-->
<LinearLayout
android:id="@+id/app_video_netTie"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#33000000"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="正在使用非Wi-Fi网络,播放将产生流量费用"
android:textColor="@android:color/white"
android:textSize="14sp" />
<ImageView
android:id="@+id/app_video_netTie_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:src="@drawable/ico_spfc_play" />
</LinearLayout>
<!--加载中-->
<LinearLayout
android:id="@+id/app_video_loading"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<ProgressBar
android:layout_width="50dp"
android:layout_height="50dp"
android:indeterminateBehavior="repeat"
android:indeterminateOnly="true" />
<TextView
android:id="@+id/app_video_speed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center"
android:text="188Kb/s"
android:textColor="@android:color/white"
android:visibility="gone" />
</LinearLayout>
<!-- 中间触摸提示-->
<include
layout="@layout/simple_player_touch_gestures"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone">
<!-- 顶部栏-->
<include layout="@layout/simple_player_topbar" />
</FrameLayout>
<!-- 底部栏-->
<LinearLayout
android:id="@+id/ll_bottom_bar"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_alignParentBottom="true"
android:background="@drawable/course_video_bottom_background"
android:gravity="center_vertical"
android:minHeight="35dp"
android:paddingTop="30dp">
<ImageView
android:id="@+id/app_video_play"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="3dp"
android:padding="1dp"
android:scaleType="centerCrop"
android:src="@drawable/course_ico_course_play" />
<LinearLayout
android:id="@+id/app_video_process_panl"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="-4dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone">
<TextView
android:id="@+id/app_video_stream"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:focusable="true"
android:gravity="center_vertical"
android:padding="5dp"
android:text="标清"
android:textColor="@android:color/white"
android:textSize="12dp"
android:visibility="gone" />
<TextView
android:id="@+id/app_video_currentTime_full"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="06:21"
android:textColor="@android:color/white"
android:textSize="12dp"
android:visibility="gone" />
<LinearLayout
android:id="@+id/app_video_lift"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:id="@+id/app_video_currentTime_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:21"
android:textColor="@android:color/white"
android:textSize="12dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
android:textColor="@android:color/white"
android:textSize="12dp" />
<TextView
android:id="@+id/app_video_endTime_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10:10"
android:textColor="@android:color/white"
android:textSize="12dp" />
</LinearLayout>
<TextView
android:id="@+id/app_video_endTime_full"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="10:10"
android:textColor="@android:color/white"
android:textSize="12dp"
android:visibility="gone" />
<ImageView
android:id="@+id/ijk_iv_rotation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:src="@drawable/simple_player_iv_rotation"
android:visibility="gone" />
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="horizontal">
<SeekBar
android:id="@+id/app_video_seekBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxHeight="2dp"
android:minHeight="2dp"
android:progressDrawable="@drawable/course_layer_progress"
android:thumb="@drawable/course_dot_seekbar" />
<LinearLayout
android:id="@+id/app_video_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/app_video_currentTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="06:21"
android:textColor="@android:color/white"
android:textSize="12dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="/"
android:textColor="@android:color/white"
android:textSize="12dp" />
<TextView
android:id="@+id/app_video_endTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="10:10"
android:textColor="@android:color/white"
android:textSize="12dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/app_video_fullscreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:src="@drawable/course_ico_play_float_full" />
</LinearLayout>
<!--声音亮度控制-->
<LinearLayout
android:id="@+id/simple_player_settings_container"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:background="#80000000"
android:gravity="center_vertical"
android:orientation="vertical"
android:visibility="visible">
<LinearLayout
android:id="@+id/simple_player_volume_controller_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/qcloud_player_icon_audio_vol_mute" />
<SeekBar
android:id="@+id/simple_player_volume_controller"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="150dp"
android:layout_height="wrap_content" />
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/qcloud_player_icon_audio_vol" />
</LinearLayout>
<LinearLayout
android:id="@+id/simple_player_brightness_controller_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:padding="5dp"
android:src="@drawable/qcloud_player_icon_brightness" />
<SeekBar
android:id="@+id/simple_player_brightness_controller"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="150dp"
android:layout_height="wrap_content" />
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/qcloud_player_icon_brightness" />
</LinearLayout>
</LinearLayout>
<!--分辨率选择-->
<LinearLayout
android:id="@+id/simple_player_select_stream_container"
android:layout_width="150dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="#80000000"
android:gravity="center_vertical"
android:visibility="gone">
<ListView
android:id="@+id/simple_player_select_streams_list"
android:layout_width="150dp"
android:layout_height="wrap_content" />
</LinearLayout>
<RelativeLayout
android:id="@+id/rl_play_pause_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone">
<ImageView
android:id="@+id/play_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/simple_player_center_play" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
layout="@layout/course_videoplay_view"
android:layout_width="match_parent"
android:layout_height="211dp" />
</LinearLayout>
\ No newline at end of file
......@@ -25,7 +25,7 @@
android:id="@+id/iv_course_list_empty_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/blank"
android:src="@drawable/course_blank"
android:visibility="gone"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"/>
......
......@@ -12,7 +12,7 @@
android:layout_centerVertical="true"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:src="@drawable/toolbar_back" />
android:src="@drawable/course_toolbar_back" />
<TextView
android:id="@+id/tv_title"
......
......@@ -128,4 +128,6 @@
<color name="color_99000000">#99000000</color>
<color name="color_30FFFFFF">#4DFFFFFF</color>
<color name="color_66000000">#66000000</color>
<color name="color_FFFFFF">#FFFFFF</color>
<color name="color_ACACAC">#ACACAC</color>
</resources>
\ No newline at end of file
......@@ -8,29 +8,11 @@ import com.ydl.ydlcommon.base.config.YDLConstants
* Created by xj on 2019/7/1.
*/
class BIConstants{
companion object {
/**
* 消息端来源
* ydl:ydl-app-android-user
* xlzx:ydl-app-android-xlzx
*/
var APP_ID:String = ""
get() {
return "ydl-app-android-"+ (if (BaseApp.instance.getGlobalConfig().appFrom== YDLConstants.FROM_XLZX)"xlzx" else "user")
}
var APP_NAME:String = ""
get() {
return if (BaseApp.instance.getGlobalConfig().appFrom== YDLConstants.FROM_XLZX)"心理咨询" else "壹点灵心理咨询"
}
var PACKAGE_NAME:String = ""
get() {
return if (BaseApp.instance.getGlobalConfig().appFrom== YDLConstants.FROM_XLZX)"com.cxzapp.xinlizixun" else "com.cxzapp.yidianling"
}
const val APP_ID = "ydl-app-android-user" //这是用户端主包的
/**
* 操作系统
......@@ -47,5 +29,133 @@ class BIConstants{
const val WELCOME_PAGE = "welcome_page"
//百度监测 用户注册行为
const val APP_REGISTER_PAGE = "app_register_page"
/**
* position
* 点击类型
*/
const val POSITION_LOGIN_CLICK = "login_click" //登录点击
const val POSITION_LOGIN_SUCCESS_CLICK = "login_success_click" //登录成功点击
//咨询筛选页
const val POSITION_CONSULT_TYPE_CLICK = "consult_type_click" //咨询方式
const val POSITION_AVERAGE_SERVICE_INPUT = "average_service_input" //服务均价
const val POSITION_AGE_CHOICE_CLICK = "age_choice_click" //年龄选择
const val POSITION_QUALIFICATION_CHOICE_CLICK = "qualification_choice_click" //资质选择
const val POSITION_OTHER_CHOICE_CLICK = "other_choice_click" //其他选择
const val POSITION_CONSULT_FILTER_RESET_CLICK = "consult_filter_reset_click" //重置
const val POSITION_CONSULT_FILTER_CHECKOUT_CLICK = "consult_filter_checkoutallconsultants_click" //查看XXX位咨询师
//百度监测 应用启动
const val POSITION_APP_START_UP_CLICK = "app_start_up_click" //应用启动
//百度监测 用户注册
const val POSITION_WX_REGISTER_CLICK = "wx_register_click" //微信第一次登录
const val POSITION_QQ_REGISTER_CLICK = "qq_register_click" //QQ第一次登录
const val POSITION_PHONE_REGISTER_CLICK = "phone_register_click" //手机号密码第一次登录
const val POSITION_ALIYUN_REGISTER_CLICK = "aliyun_register_click" //阿里云第一次一键登录
const val POSITION_CODE_REGISTER_CLICK = "code_register_click" //短信第一次登录
//随便逛逛点击
const val POSITION_LOOK_AROUND_CLICK = "look_around_click"
//登录主页浏览事件(包含随便逛逛)
const val POSITION_LOGIN_ONE_PAGE_VISIT = "login_main_one_page_visit"
//登录主页浏览事件(不包含随便逛逛)
const val POSITION_LOGIN_TWO_PAGE_VISIT = "login_main_two_page_visit"
/**
* action type
* 行为数据埋点,sign1字段 是对同一key下多种不同行为的描述
*/
const val ACTION_TYPE_CODE_LOGIN: String = "code_login" //验证码登录
const val ACTION_TYPE_RESET_PWD: String = "reset_pwd" //重置密码登录
const val ACTION_TYPE_PWD_LOGIN: String = "pwd_login" //手机号密码登录
const val ACTION_TYPE_DIRECT_LOGIN: String = "direct_login" //一键登录
const val ACTION_TYPE_QQ_THIRD_LOGIN: String = "qq_login" //QQ登录
const val ACTION_TYPE_WX_THIRD_LOGIN: String = "wx_login" //WX登录
}
//====================壹点灵用户版首页(ydl_user_main_page)====================
class UserMainEvent {
companion object {
private const val YDL_USER_MAIN_PAGE: String = "ydl_user_main_page|"//壹点灵用户版首页 partId
const val YDL_USER_SEARCH_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_search_click"//搜索栏
const val YDL_USER_TELEPHONE_CUSTOMER_SERVICE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_telephone_customer_service_click"//电话客服
const val YDL_USER_BANNER_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_banner_click"//banner
const val YDL_USER_NOTICE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_notice_click"//公告
const val YDL_USER_CONSULT_CLASSIFICATION_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_consult_classification_click"//首页咨询分类
const val YDL_USER_CONSULT_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_consult_click"//四个大按钮 心理咨询点击人数
const val YDL_USER_TALK_IN_TIME_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_talk_in_time_click"//四个大按钮 即时倾诉点击人数
const val YDL_USER_PSYCHOLOGICAL_CLASSROOM_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_psychological_classroom_click"//四个大按钮 心理课堂点击人数
const val YDL_USER_PSYCHOLOGICAL_TEST_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_psychological_test_click"//四个大按钮 心理测试点击人数
const val YDL_USER_CONSULT_MORE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_consult_more_click"//咨询解惑更多
const val YDL_USER_CONSULT_TYPE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_consult_type_click"//咨询解惑分类标签
const val YDL_USER_EXPERT_INTRODUCTION_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_expert_introduction_click"//咨询师介绍模块
const val YDL_USER_PRIVATE_CHAT_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_private_chat_click"//咨询师私聊按钮
const val YDL_USER_LISTEN_MORE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_listen_more_click"//倾诉排解更多
const val YDL_USER_LISTEN_TYPE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_listen_type_click"//倾诉排解分类标签
const val YDL_USER_LISTENER_INTRODUCTION_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_listener_introduction_click "//倾诉师介绍模块
const val YDL_USER_COURSE_MORE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_course_more_click"//课程成长更多
const val YDL_USER_COURSE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_course_click"//课程标题图区域
const val YDL_USER_ASK_MORE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_ask_more_click"//解忧问答更多
const val YDL_USER_ASK_COMMENT_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_ask_comment_click"//问答评论区域
const val YDL_USER_HEART_RADIO_MORE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_heart_radio_more_click"//心灵电台更多
const val YDL_USER_RADIO_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_radio_click "//区域内四个标题
const val YDL_USER_RADIO_PLAY_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_radio_play_click"//心灵电台play按钮点击
const val YDL_USER_ARTICLE_MORE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_article_more_click"//文章阅读更多
const val YDL_USER_ARTICLE_CLICK: String = YDL_USER_MAIN_PAGE + "ydl_user_article_click"//文章标题图区域
const val YDL_USER_MAIN_PAGE_VISIT: String = YDL_USER_MAIN_PAGE + "ydl_user_main_page_visit "//首页浏览事件
}
}
//====================APP咨询列表页(app_consult_list_page)====================
class ConsultEvent {
companion object {
private const val APP_CONSULT_LIST_PAGE: String = "app_consult_list_page|"//APP咨询列表页 partId
const val APP_CONSULT_LIST_PAGE_VISIT: String = APP_CONSULT_LIST_PAGE + "app_consult_list_page_visit"//列表页浏览事件
const val APP_CONSULT_LIST_CONSULT_GUIDE_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_consult_guide_click "//咨询指南
const val APP_CONSULT_LIST_ONLINE_CUSTOMER_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_online_customer_click"//在线客服
const val APP_CONSULT_LIST_THEME_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_theme_click "//主题全部
const val APP_CONSULT_LIST_AREA_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_area_click"//地区各个地区
const val APP_CONSULT_LIST_SORT_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_sort_click"//排序综合排序
const val APP_CONSULT_LIST_DOCTOR_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_doctor_click"//每个咨询师页面点击
const val APP_CONSULT_LIST_CHAT_CLICK: String = APP_CONSULT_LIST_PAGE + "app_consult_list_chat_click"//每个咨询师私聊
}
}
//====================课程列表页(course_list_page)====================
class CourseListEvent {
companion object {
private const val COURSE_LIST_PAGE: String = "course_list_page|"//课程列表页 partId
const val POSITION_COURSE_LIST_RETURN_CLICK = COURSE_LIST_PAGE + "course_list_return_click" //返回点击
const val POSITION_COURSE_LIST_SORT_CLICK = COURSE_LIST_PAGE + "course_list_sort_click" //综合排序点击
const val POSITION_COURSE_LIST_FILTER_CLICK = COURSE_LIST_PAGE + "course_list_filter_click" //筛选点击
const val POSITION_COURSE_LIST_CLASSIFICATION_CLICK = COURSE_LIST_PAGE + "course_list_classification_click" //分类点击
const val POSITION_COURSE_LIST_AUDITION_CLICK = COURSE_LIST_PAGE + "course_list_audition_click" //试听点击
const val POSITION_COURSE_LIST_PAGE_VISIT = COURSE_LIST_PAGE + "course_list_page_visit" //课程列表页浏览点击
const val POSITION_COURSE_LIST_XXX_CLICK = COURSE_LIST_PAGE + "course_list_" //课程点击
}
}
//====================课程频道页(course_home_page)====================
class CourseHomeEvent {
companion object {
private const val COURSE_HOME_PAGE: String = "course_home_page|"//课程频道页 partId
const val POSITION_COURSE_HOME_PAGE_VISIT = COURSE_HOME_PAGE + "course_home_page_visit" //列表页浏览点击
const val POSITION_COURSE_HOME_MY_COUSE_CLICK = COURSE_HOME_PAGE + "course_home_my_couse_click" //我的课程
const val POSITION_COURSE_HOME_SEACH_CLICK = COURSE_HOME_PAGE + "course_home_seach_click" //搜索
const val POSITION_COURSE_HOME_BANNER_CLICK = COURSE_HOME_PAGE + "course_home_banner_click" //banner-各位置
const val POSITION_COURSE_HOME_CLASSIFICATION_CLICK = COURSE_HOME_PAGE + "course_home_classification_click" //分类点击
const val POSITION_COURSE_HOME_EXCELLENT_COURSES_PAY_XXX_CLICK = COURSE_HOME_PAGE + "course_home_excellent_courses_pay_" //精品课程-付费课程-各课程页面点击
const val POSITION_COURSE_HOME_EXCELLENT_COURSES_FREE_XXX_CLICK = COURSE_HOME_PAGE + "course_home_excellent_courses_free_" //精品课程-免费课程-各课程页面点击
const val POSITION_COURSE_HOME_EXCELLENT_COURSES_MORE_CLICK = COURSE_HOME_PAGE + "course_home_excellent_courses_more_click" //精品课程-更多课程
const val POSITION_COURSE_HOME_CONSULTANT_COURSE_MORE_CLICK = COURSE_HOME_PAGE + "course_home_consultant_course_more_click" //咨询师课程-更多课程
const val POSITION_COURSE_HOME_OFFLINE_CERTIFICATION_TRAINING_XXX_CLICK = COURSE_HOME_PAGE + "course_home_offline_certification_training_" //线下考证培训-各课程页面点击
const val POSITION_COURSE_HOME_OFFLINE_CERTIFICATION_TRAINING_MORE_CLICK = COURSE_HOME_PAGE + "course_home_offline_certification_training_more_click" //线下考证培训-更多课程
const val POSITION_COURSE_HOME_THEMATIC_COURSES_XXX_CLICK = COURSE_HOME_PAGE + "course_home_thematic_courses_" //专题课程-各课程页面点击
const val POSITION_COURSE_HOME_THEMATIC_COURSES_MORE_CLICK = COURSE_HOME_PAGE + "course_home_thematic_courses_more_click" //专题课程-更多
}
}
}
\ No newline at end of file
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