Browse Source

作文收藏完成

master
suliang 2 years ago
parent
commit
c859a896ca

+ 1
- 1
app/src/main/java/com/xkl/cdl/data/bean/course/Lesson.kt View File

@@ -27,7 +27,7 @@ data class Lesson(
var lessonPositionInList : Int = 0
/** 该课时的总数据 或者作文关联的数据,如视频关联的内容*/
var wordIds = mutableListOf<Long>()
/** 学习进度位置,为已学下标的位置,在作文课堂练习时,初始值为0开始的下标,学习时已自动-1,取当前下标的值*/
/** 学习进度位置,为已学下标的位置,默认-1*/
var learnedIndex: Int = -1
/**课时学前测试成绩 */
var beforeTestScore = AppConstants.NOT_DOING

+ 11
- 6
app/src/main/java/com/xkl/cdl/data/exam_record/AppDatabase.kt View File

@@ -6,7 +6,6 @@ import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.suliang.common.util.file.FileUtil
import com.xkl.cdl.data.bean.DictionaryBean
import com.xkl.cdl.data.bean.DictionaryItem
import com.xkl.cdl.module.XKLApplication
import mqComsumerV1.Struct
@@ -17,28 +16,34 @@ import java.io.File
* create 2022/7/7 16:50
* Describe:
*/
@Database(entities = [Exam::class,ExamItem::class,DictionaryItem::class], version = 2, exportSchema = true)
@Database(entities = [Exam::class,ExamItem::class,DictionaryItem::class,Collect::class], version = 3, exportSchema = true)
abstract class AppDatabase : RoomDatabase() {
abstract fun examDao() : ExamDao
abstract fun examItemDao(): ExamItemDao
abstract fun examMiddleDao(): ExamMiddleDao
abstract fun dictionaryDao(): DictionaryDao
abstract fun c_CollectDao():C_CollectDao
companion object{
private var DATABASE_NAME :String = "${FileUtil.getSaveDirPath("db")}${File.separator}app.db"
val MIGRATION_1_2 = object :Migration(1,2){
private val MIGRATION_1_2 = object :Migration(1,2){
override fun migrate(database : SupportSQLiteDatabase) {
//版本升级策略,增加一个dictionary表
database.execSQL("CREATE TABLE IF NOT EXISTS `dic_history` (`courseId` INTEGER NOT NULL, `queryTime` INTEGER NOT NULL, `id` INTEGER NOT NULL, `word` TEXT NOT NULL, `form` INTEGER NOT NULL, `pre_index` TEXT, `phonetic_uk` TEXT, `phonectic_us` TEXT, `phonectic_cn` TEXT, `basic_explaination` TEXT, `all_explaination` TEXT, `phrase` TEXT, `example` TEXT, `reference` TEXT, PRIMARY KEY(`word`))")
}
}
private val MIGRATION_2_3 = object :Migration(2,3){
override fun migrate(database : SupportSQLiteDatabase) {
//版本升级策略,增加一个dictionary表
database.execSQL("CREATE TABLE IF NOT EXISTS `c_collect` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `courseId` INTEGER NOT NULL, `chapterId` INTEGER NOT NULL, `wordId` INTEGER NOT NULL, `lessonType` INTEGER NOT NULL)")
}
}
val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
Room.databaseBuilder(XKLApplication.instance(), AppDatabase::class.java, DATABASE_NAME)
.addMigrations(MIGRATION_1_2).build()
.addMigrations(MIGRATION_1_2)
.addMigrations(MIGRATION_2_3).build()
}
@JvmStatic

+ 25
- 0
app/src/main/java/com/xkl/cdl/data/exam_record/C_CollectDao.kt View File

@@ -0,0 +1,25 @@
package com.xkl.cdl.data.exam_record

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query

/**
* author suliang
* create 2022/8/12 15:02
* Describe:
*/
@Dao
interface C_CollectDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(item: Collect) : Long
@Query("SELECT * FROM c_collect WHERE courseId = :courseId AND chapterId = :chapterId AND lessonType = :lessonType")
fun queryAll(courseId:Long,chapterId:Long,lessonType:Int) : List<Collect>

@Query("DELETE FROM c_collect WHERE id = :collectId")
fun remove(collectId:Long)
}

+ 20
- 0
app/src/main/java/com/xkl/cdl/data/exam_record/Collect.kt View File

@@ -0,0 +1,20 @@
package com.xkl.cdl.data.exam_record

import androidx.room.Entity
import androidx.room.PrimaryKey

/**
* author suliang
* create 2022/8/12 15:23
* Describe:
*/
@Entity(tableName = "c_collect")
class Collect {
@PrimaryKey(autoGenerate = true)
var id : Long = 0 // 唯一键id 自动增长
var courseId : Long = 0 //课程
var chapterId : Long = 0 //章节
var wordId : Long = 0 //对应item的id
var lessonType : Int = 0 //对应课时type类型
}

+ 3
- 2
app/src/main/java/com/xkl/cdl/data/manager/db/DBCourseManager.kt View File

@@ -21,6 +21,7 @@ import io.reactivex.rxjava3.core.Observable
import net.sqlcipher.database.SQLiteDatabase
import java.io.File
import java.util.*
import kotlin.math.abs

/**
* author suliang
@@ -126,7 +127,7 @@ object DBCourseManager {
AppConstants.COURSEPACK_TYPE_CHINESE_COMPOSITION -> when (lesson.lessonType) {
//知识点
AppConstants.LESSON_TYPE_COMPOSITION_KNOWLEDGE -> {
lesson.learnedIndex = learnIndex
// lesson.learnedIndex = learnIndex
wordIds.size - 1 == learnIndex
}
//视频
@@ -143,8 +144,8 @@ object DBCourseManager {
}
//课堂练习
AppConstants.LESSON_TYPE_COMPOSITION_READING -> {
lesson.learnedIndex = learnIndex
detail.lesson_learn_point[key]?.let { entityId ->
lesson.learnedIndex = wordIds.indexOf(abs(entityId))
entityId < 0 //小于0 ,学习完成
} ?: false //否则未完成
}

+ 76
- 5
app/src/main/java/com/xkl/cdl/data/repository/DataRepository.kt View File

@@ -9,13 +9,11 @@ import com.suliang.common.util.file.FileUtil
import com.xkl.cdl.data.AppConstants
import com.xkl.cdl.data.bean.course.CourseDetail
import com.xkl.cdl.data.bean.course.Lesson
import com.xkl.cdl.data.exam_record.AppDatabase
import com.xkl.cdl.data.exam_record.Exam
import com.xkl.cdl.data.exam_record.ExamItem
import com.xkl.cdl.data.exam_record.ExamWithDetail
import com.xkl.cdl.data.exam_record.*
import com.xkl.cdl.data.manager.db.DBCourseManager
import com.xkl.cdl.data.manager.db.DbControlBase
import com.xkl.cdl.module.XKLApplication
import io.reactivex.rxjava3.annotations.NonNull
import io.reactivex.rxjava3.core.Observable
import mqComsumerV1.Struct
import java.io.File
@@ -232,5 +230,78 @@ object DataRepository {
}
}
/**
* 查询该课程该章节对应的视频板书收藏集合
* @param courseId Long
* @param chapterId Long
* @return Observable<List<Collect>>
*/
fun queryVideoBlackBoardCollect(courseId : Long,chapterId : Long): List<Collect>{
return queryCollect(courseId,chapterId,AppConstants.LESSON_TYPE_COMPOSITION_VIDEO)
}
/**
* 获取该课程该章节的课堂练习的收藏集合
* @param courseId Long
* @param chapterId Long
* @return Observable<List<Collect>>
*/
fun queryCReadingCollect(courseId : Long,chapterId : Long): List<Collect>{
return queryCollect(courseId,chapterId,AppConstants.LESSON_TYPE_COMPOSITION_READING)
}
private fun queryCollect(courseId : Long,chapterId : Long,lessonType:Int): List<Collect>{
return AppDatabase.instance.c_CollectDao().queryAll(courseId,chapterId,lessonType)
}
/**
* 添加视频板书到收藏
* @param courseId Long 课程id
* @param chapterId Long 章节id
* @param videoBlackboardId Long 版本id
* @return Observable<Long>
*/
fun addVideoBlackBoardCollect(courseId : Long, chapterId : Long, videoBlackboardId : Long) : Observable<Long> {
return Observable.fromCallable {
AppDatabase.instance.c_CollectDao().insert(Collect().apply {
this.courseId = courseId
this.chapterId = chapterId
this.wordId = videoBlackboardId
this.lessonType = AppConstants.LESSON_TYPE_COMPOSITION_VIDEO
})
}
}
/**
* 添加课堂练习到收藏
* @param courseId Long 课程id
* @param chapterId Long 章节id
* @param videoBlackboardId Long 版本id
* @return Observable<Long>
*/
fun addCReadingCollect(courseId : Long, chapterId : Long, readingId : Long) : Observable<Long> {
return Observable.fromCallable {
AppDatabase.instance.c_CollectDao().insert(Collect().apply {
this.courseId = courseId
this.chapterId = chapterId
this.wordId = readingId
this.lessonType = AppConstants.LESSON_TYPE_COMPOSITION_READING
})
}
}
/**
* 移除收藏
* @param collectId Long 收藏的id
*/
fun removeCollect(collectId:Long) : Observable<Unit> {
return Observable.fromCallable {
AppDatabase.instance.c_CollectDao().remove(collectId)
}
}
}

+ 1
- 0
app/src/main/java/com/xkl/cdl/module/learn/LearnCReadingActivity.kt View File

@@ -152,6 +152,7 @@ class LearnCReadingActivity : BaseActivityVM<ActivityLearnCreadingBinding, Learn
/** 显示答案 */
private fun showAnswer() {
vm.isLearned = true
vm.currentValue.value?.let {
val builder = SpannableStringBuilder(it.answer)
if (vm.tipCount < vm.tipMaxForCurrent) {

+ 27
- 13
app/src/main/java/com/xkl/cdl/module/learn/LearnCReadingViewModel.kt View File

@@ -20,10 +20,16 @@ class LearnCReadingViewModel : LearnBaseViewModel() {
/* 操作数据 */
val learnData = DataTransferHolder.instance.getData<LearnData>()
//当前学习下标 初始为0 ,非-1
var currentLearnIndex = learnData.lesson.learnedIndex - 1
//当前学习下标 初始值为-1,不为-1,则显示当前内容,所以-1
var currentLearnIndex = learnData.lesson.learnedIndex.let {
if (it != -1){
it - 1
}else it
}
//记录最后一条的item是否进行了学习, 初始标记直接为课时学习是否完成的标记就好了
var lastIsLearned = learnData.lesson.learnIsOver
//当前是否学习
var isLearned = false
@@ -86,11 +92,16 @@ class LearnCReadingViewModel : LearnBaseViewModel() {
*/
fun addCollect() : MutableLiveData<Long> {
val result = MutableLiveData<Long>()
// TODO: 2022/5/19 实现收藏操作
Observable.create<Long> {
currentValue.value?.collectId = 1
result.postValue(1)
}.compose(diskIo2Main()).subscribe()
currentValue.value?.let { item ->
learnData.lesson.let {
DataRepository.addCReadingCollect(it.courseId, it.chapterId, item.id)
.compose(diskIo2Main())
.subscribe { collectId ->
item.collectId = collectId
result.postValue(collectId)
}
}
}
return result
}
@@ -100,11 +111,14 @@ class LearnCReadingViewModel : LearnBaseViewModel() {
*/
fun removeCollect() : MutableLiveData<Long> {
val result = MutableLiveData<Long>()
// TODO: 2022/5/19 实现取消收藏操作
Observable.create<Long> {
currentValue.value?.collectId = 0
result.postValue(0)
}.compose(diskIo2Main()).subscribe()
currentValue.value?.let { item ->
learnData.lesson.let {
DataRepository.removeCollect(item.collectId).compose(diskIo2Main()).subscribe {
item.collectId = 0
result.postValue(0)
}
}
}
return result
}
@@ -174,7 +188,7 @@ class LearnCReadingViewModel : LearnBaseViewModel() {
learnData.lesson.learnedIndex = currentLearnIndex
val temp = learnData.lesson.learnIsOver == lastIsLearned
//发送信息,更改进度点
if (!temp){
if (!temp) {
//以前是未完成的,才进行发送操作
learnData.lesson.learnIsOver = true
}

+ 8
- 9
app/src/main/java/com/xkl/cdl/module/learn/LearnCVideoActivity.kt View File

@@ -116,15 +116,14 @@ class LearnCVideoActivity : BaseActivityVM<ActivityLearnCvideoBinding, LearnCVid
layoutManager = LinearLayoutManager(this@LearnCVideoActivity, LinearLayoutManager.VERTICAL, false)
adapter = AdapterVideo(vm).apply {
onItemClick = { v, position, item ->
// TODO: 2022/5/25 点击事件,处理收藏和取消收藏
// when(item.collectId){
// 0L -> vm.addCollect(item).observe(this@LearnCVideoActivity){
// notifyDataSetChanged()
// }
// else -> vm.removeCollect(item).observe(this@LearnCVideoActivity){
// notifyDataSetChanged()
// }
// }
when(item.collectId){
0L -> vm.addCollect(item).observe(this@LearnCVideoActivity){
notifyDataSetChanged()
}
else -> vm.removeCollect(item).observe(this@LearnCVideoActivity){
notifyDataSetChanged()
}
}
}
}
}

+ 95
- 93
app/src/main/java/com/xkl/cdl/module/learn/LearnCVideoViewModel.kt View File

@@ -1,16 +1,20 @@
package com.xkl.cdl.module.learn

import android.provider.SyncStateContract
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import appApi.AppApi
import com.jeremyliao.liveeventbus.LiveEventBus
import com.suliang.common.extension.diskIo2Main
import com.suliang.common.util.DateUtil
import com.suliang.common.util.LogUtil
import com.xkl.cdl.R
import com.xkl.cdl.data.AppConstants
import com.xkl.cdl.data.DataTransferHolder
import com.xkl.cdl.data.bean.VideoBean
import com.xkl.cdl.data.bean.course.Lesson
import com.xkl.cdl.data.event.LearnEventData
import com.xkl.cdl.data.manager.UserInfoManager
import com.xkl.cdl.data.manager.db.DBCourseManager
import com.xkl.cdl.data.manager.db.DbControlBase
import com.xkl.cdl.data.repository.DataRepository
@@ -19,23 +23,28 @@ import com.xkl.videoplayer.bean.PineMediaPlayerBean
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.functions.BiFunction
import mqComsumerV1.Struct
import java.util.*
import kotlin.Comparator
import kotlin.collections.ArrayList


class LearnCVideoViewModel : LearnBaseViewModel() {
val lesson = DataTransferHolder.instance.getData<Lesson>() //视频课时lesson
var currentPlayTime : Long = lesson.videoPlayTime //当前播放时间: 毫秒
private val dbBaseControl : DbControlBase = DbControlBase(lesson.subjectId, lesson.coursePackId, lesson.coursePackType, lesson.courseId, lesson.courseType)
var currentPlayTime : Long = lesson.videoPlayTime //当前播放时间: 毫秒
private val dbBaseControl : DbControlBase = DbControlBase(lesson.subjectId, lesson.coursePackId, lesson.coursePackType,
lesson.courseId, lesson.courseType)
var isCompletion = false //是否播放完成
var isLearn = false //是否有播放记录
var isCompletion = false //是否播放完成
var isLearn = false //是否有播放记录
var mVideoBean : VideoBean? = null //视频数据
//选中tab 0:板书 1:笔记
var showTab = 0
private var timeForLong : Long = 0 //本次学习开始的时间
private var timeForLong : Long = 0 //本次学习开始的时间
private var clientTag : String? = null
//视频源
@@ -44,7 +53,7 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
//我的笔记
var mCollectVideoBlackBoradList : MutableList<VideoBean.VideoBlackBoard> = ArrayList<VideoBean.VideoBlackBoard>()
var mCollectVideoBlackBoradList : MutableList<VideoBean.VideoBlackBoard> = mutableListOf()
//上传数据监听
val uploadDate = MutableLiveData<Boolean>()
@@ -58,112 +67,105 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
/** 获取视频数据 */
fun queryVideoData() : MutableLiveData<Boolean> {
val result = MutableLiveData<Boolean>()
// TODO: 2022/5/24 获取该课时下的收藏信息 板书设置收藏id,同时对笔记进行排序
// io.reactivex.rxjava3.core.Observable.create<AppApi.CompCollectionDetailedResponse> {
// val build = CompCollectionDetailedRequest.newBuilder().apply {
// userId = 1
// productId = lesson.courseId
// typeId = 2
// columnId = lesson.chapterId
// }.build()
// }
Observable.create<Boolean> {
mVideoBean = DBCourseManager.queryVideoData(dbBaseControl,lesson)
mVideoBean = DBCourseManager.queryVideoData(dbBaseControl, lesson)
mVideoBean?.getmVideoBlackBoard()?.let { blackList ->
DataRepository.queryVideoBlackBoardCollect(lesson.courseId, lesson.chapterId).forEach { c ->
run m@ {
blackList.forEach {
if (it.videoBlackboardId == c.wordId){
it.collectId = c.id
mCollectVideoBlackBoradList.add(it)
return@m
}
}
}
}
}
mCollectVideoBlackBoradList.sortBy {
it.sort
}
it.onNext(true)
it.onComplete()
}.compose(diskIo2Main())
.subscribe{
}.compose(diskIo2Main()).subscribe {
result.value = true
}
return result
}
/* *//** 取消笔记 *//*
fun removeCollect(item : VideoBean.VideoBlackBoard) : MutableLiveData<Boolean>? {
/** 添加笔记 */
fun addCollect(item : VideoBean.VideoBlackBoard) : MutableLiveData<Boolean> {
val result = MutableLiveData<Boolean>()
//体验账号,当前页假数据
if (!UserInfoManager.getInstance().isOfficialAccount()) {
item.setCollectId(0)
mCollectVideoBlackBoradList.remove(item)
result.postValue(true)
return result
}
DataRepository.getInstance()
.removeCollect(item.getCollectId())
.subscribe(object : BaseObserver<AppApi.CompRemoveCollectResponse?>(this) {
fun onSuccess(data : AppApi.CompRemoveCollectResponse?) {
item.setCollectId(0)
mCollectVideoBlackBoradList.remove(item)
result.postValue(true)
}
fun onFailed(code : Int, msg : String?) {
getToast().setValue(XKLApplication.getInstance().getString(R.string.remove_collect_error))
DataRepository.addVideoBlackBoardCollect(lesson.courseId, lesson.chapterId, item.videoBlackboardId)
.compose(diskIo2Main())
.subscribe {
item.collectId = it
var right = mCollectVideoBlackBoradList.size - 1
var left = 0
if (mCollectVideoBlackBoradList.isEmpty() || item.sort > mCollectVideoBlackBoradList[right].sort) {
mCollectVideoBlackBoradList.add(item)
} else if (item.sort < mCollectVideoBlackBoradList[left].sort) {
mCollectVideoBlackBoradList.add(0, item)
} else {
//item应该在内部查找插入位置
var mid = 0
while(left <= right){
mid = left + (right - left) / 2
//寻找插入位置
if (item.sort < mCollectVideoBlackBoradList[mid].sort) { //小于,则在左边
right = mid - 1
}
if (item.sort > mCollectVideoBlackBoradList[mid].sort) { //大于,则在右边
left = mid + 1
}
}
//循环完,找到的值 left将大于right,left的下标值,即为插入的位置
mCollectVideoBlackBoradList.add(left,item)
}
})
result.postValue(true)
}
return result
}
*//** 添加笔记 *//*
fun addCollect(item : VideoBean.VideoBlackBoard) : MutableLiveData<Boolean>? {
/** 取消笔记 */
fun removeCollect(item : VideoBean.VideoBlackBoard) : MutableLiveData<Boolean> {
val result = MutableLiveData<Boolean>()
//体验账号,当前页假数据
if (!UserInfoManager.getInstance().isOfficialAccount()) {
item.setCollectId(mCollectVideoBlackBoradList.size + 1)
mCollectVideoBlackBoradList.add(item)
result.postValue(true)
return result
}
DataRepository.getInstance()
.collect(getLesson().getCourseId(), getLesson().getChapterId(), item.getVideoBlackboardId(),
SyncStateContract.Constants.COMPOSITON_COLLECT_VIDEO_BLACK_BOOK)
.subscribe(object : BaseObserver<AppApi.CompCollectResponse?>(this) {
fun onSuccess(data : AppApi.CompCollectResponse) {
val collectedMap = data.collectedMap
if (collectedMap != null) {
val aLong = collectedMap[item.getVideoBlackboardId()]
if (aLong != null) {
item.setCollectId(aLong)
mCollectVideoBlackBoradList.add(item)
Collections.sort(mCollectVideoBlackBoradList,
Comparator<Any?> { o1, o2 -> o1.getSort() - o2.getSort() })
}
}
result.postValue(true)
}
fun onFailed(code : Int, msg : String?) {
getToast().setValue(XKLApplication.getInstance().getString(R.string.add_collect_error))
}
})
DataRepository.removeCollect(item.collectId).compose(diskIo2Main())
.subscribe{
item.collectId = 0
mCollectVideoBlackBoradList.remove(item)
result.value = true
}
return result
}
*/
//是否显示返回弹窗
private var isShowBackDialog = false
override fun onResume(owner : LifecycleOwner) {
super.onResume(owner)
if (!isShowBackDialog){
if (!isShowBackDialog) {
startTotalCounting()
}
}
override fun onPause(owner : LifecycleOwner) {
super.onPause(owner)
if (!isShowBackDialog){
if (!isShowBackDialog) {
stopTotalCountTing()
}
}
/**
* 显示或关闭的返回弹窗, 显示时关闭总计时 关闭时,开启总计时
* @param isShow Boolean
*/
fun showOrDismissBackDialogForTime(isShow : Boolean) {
isShowBackDialog = isShow
when{
when {
isShowBackDialog -> stopTotalCountTing()
else -> startTotalCounting()
}
@@ -174,20 +176,19 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
uploadDate.value = true
return
}
Observable.zip(
Observable.create<Boolean> {
Observable.zip(Observable.create<Boolean> {
try {
//保存视频播放时间
XKLApplication.mobileCache.setVideoPoint(lesson.subjectId.toLong(), lesson.coursePackId, lesson.courseId, lesson.wordIds[0], currentPlayTime.toString())
XKLApplication.mobileCache.setVideoPoint(lesson.subjectId.toLong(), lesson.coursePackId, lesson.courseId,
lesson.wordIds[0], currentPlayTime.toString())
it.onNext(true)
} catch (e : Exception) {
e.printStackTrace()
it.onNext(false)
}
it.onComplete()
},
Observable.create<Boolean> { emitter ->
//保存数据
}, Observable.create<Boolean> { emitter ->
//保存数据
val record = Struct.Record.newBuilder().apply {
//进度点
addEntity(Struct.LearnEntity.newBuilder().apply {
@@ -221,21 +222,20 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
emitter.onNext(DataRepository.saveRecord(record))
emitter.onComplete()
}, { t1, t2 ->
t1 && t2
}).compose(diskIo2Main()).subscribe {
if (!it){
t1 && t2
}).compose(diskIo2Main()).subscribe {
if (!it) {
LogUtil.e("视频数据保存有误")
return@subscribe
}
lesson.videoPlayTime = currentPlayTime
LogUtil.e("当前播放时间:$currentPlayTime")
when{
when {
//本课时已完成,只发送消息更新进度点即可
lesson.learnIsOver -> {
//发送数据事件
LiveEventBus.get<LearnEventData>(AppConstants.EVENT_LESSON_DATA)
.post(LearnEventData(lesson.subjectId, lesson.courseId,
AppConstants.DATA_LESSON_LEARN_OVER).apply {
.post(LearnEventData(lesson.subjectId, lesson.courseId, AppConstants.DATA_LESSON_LEARN_OVER).apply {
this.leesonPositionIndex = lesson.lessonPositionInList
isOnlyUpdatePoint = true
})
@@ -246,8 +246,7 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
lesson.learnIsOver = true
//发送数据事件
LiveEventBus.get<LearnEventData>(AppConstants.EVENT_LESSON_DATA)
.post(LearnEventData(lesson.subjectId, lesson.courseId,
AppConstants.DATA_LESSON_LEARN_OVER).apply {
.post(LearnEventData(lesson.subjectId, lesson.courseId, AppConstants.DATA_LESSON_LEARN_OVER).apply {
this.leesonPositionIndex = lesson.lessonPositionInList
isOnlyUpdatePoint = false
})
@@ -258,8 +257,9 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
}
private fun getCurrentDateWithString() = DateUtil.format(System.currentTimeMillis(), DateUtil.FORMAT_1)
/* *//**
/* */
/**
* 上传学习时间
* 视频播放进度点
*//*
@@ -330,7 +330,8 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
}
*//** 发送动作返回进行统计 *//*
*/
/** 发送动作返回进行统计 *//*
private fun dataToBack() {
//修改lesson学习数据
val learnLessson : CompositionLesson = getLesson()
@@ -346,7 +347,8 @@ class LearnCVideoViewModel : LearnBaseViewModel() {
}
*//**
*/
/**
* 保存当前的单词学习时长
*//*
private fun saveCurrentLearnDuration() : Struct.LearnDuration.Builder? {

+ 12
- 2
app/src/main/java/com/xkl/cdl/module/m_center_learn/coursechildren/CourseMainFragmentViewModel.kt View File

@@ -395,10 +395,20 @@ class CourseMainFragmentViewModel(val courseIndex : Int) : BaseViewModel() {
*/
fun queryCompositionReadingData(entity : Lesson) : MutableLiveData<LearnData> {
val result = MutableLiveData<LearnData>()
// TODO: 2022/5/19 查询课堂练习的收藏数据 需要给 CompositionReadingBean设置收藏id
Observable.create<List<CompositionReadingBean>> {
result.postValue(LearnData(entity).apply {
readingList = DBCourseManager.queryCompositionReading(dbControlBase, entity)
readingList = DBCourseManager.queryCompositionReading(dbControlBase, entity).apply {
DataRepository.queryCReadingCollect(entity.courseId,entity.chapterId).forEach { c ->
run m@{
this.forEach {
if (c.wordId == it.id){
it.collectId = c.id
return@m
}
}
}
}
}
})
it.onComplete()
}.compose(diskIo2Main()).subscribe()

+ 2
- 0
app/src/main/res/layout/dialog_lesson_learn.xml View File

@@ -137,6 +137,8 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inc_statistics_number"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:text="我的学习效果是?快去课时学后测试吧!"
android:visibility="gone"/>


Loading…
Cancel
Save