From ef6b84334f9dcb94760eb32dde87be2e06b47a9f Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Fri, 16 Jun 2023 16:25:30 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E5=B1=95=E7=A4=BA=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=BD=95=E5=88=B6=E8=A7=86=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../watcher/ui/HistoryVideoActivity.kt | 78 ++++++++++++++++++- .../watcher/ui/adapter/HistoryVideoAdapter.kt | 43 ++++++++++ .../res/layout/activity_history_video.xml | 29 ++++++- library-common/build.gradle | 2 +- .../com/common/commonlib/db/AppDatabase.kt | 8 ++ .../com/common/commonlib/db/dao/VideoDao.kt | 8 +- .../com/common/commonlib/db/entity/Video.kt | 2 +- library-ijkplayer/build.gradle | 2 +- .../library/vlc/encoder/AndroidMuxer.java | 13 +++- 9 files changed, 175 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/HistoryVideoAdapter.kt diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt index 1338b76..7368707 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HistoryVideoActivity.kt @@ -2,13 +2,23 @@ package com.yinuo.safetywatcher.watcher.ui import android.content.Intent import android.view.View +import androidx.activity.result.contract.ActivityResultContracts +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.LinearLayoutManager +import com.common.commonlib.db.DBUtils +import com.common.commonlib.db.entity.Video import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityHistoryVideoBinding import com.yinuo.safetywatcher.player.ProVideoActivity import com.yinuo.safetywatcher.watcher.base.BaseActivity +import com.yinuo.safetywatcher.watcher.constant.DEFAULT_QUERY_TIME_INTERVAL +import com.yinuo.safetywatcher.watcher.ui.adapter.HistoryVideoAdapter +import com.yinuo.safetywatcher.watcher.ui.view.CommonTopBar +import com.yinuo.safetywatcher.watcher.utils.DateUtils import com.yinuo.safetywatcher.watcher.utils.LztekUtil import com.yinuo.safetywatcher.watcher.utils.showToast -import com.yinuo.safetywatcher.watcher.ui.view.CommonTopBar +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import java.io.File @@ -18,9 +28,17 @@ class HistoryVideoActivity : BaseActivity() { ActivityHistoryVideoBinding.inflate(layoutInflater) } + private val mAdapter = HistoryVideoAdapter().apply { + mItemClickListener = object : HistoryVideoAdapter.OnItemClickListener { + override fun onItemClick(data: Video) { + gotoPlayVideo(data.path) + } + } + } + override fun onOptionClick(type: Int, target: View) { if (0 == type) { - + queryData() } else if (1 == type) { val usbStoragePath = LztekUtil.getLztek()?.usbStoragePath if (usbStoragePath.isNullOrEmpty() || !File(usbStoragePath).exists()) { @@ -33,7 +51,7 @@ class HistoryVideoActivity : BaseActivity() { override fun getOptions(): List? { val ops = mutableListOf() -// ops.add(CommonTopBar.Option(0, getString(R.string.search))) + ops.add(CommonTopBar.Option(0, getString(R.string.search))) ops.add(CommonTopBar.Option(1, getString(R.string.export))) return ops } @@ -46,7 +64,61 @@ class HistoryVideoActivity : BaseActivity() { return mBinding.root } + private var startTime = -1L + private var endTime = -1L + + private val paramsLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + val intent = result.data + intent?.apply { + startTime = getLongExtra(ChooseParamsActivity.START_TIME, startTime) + endTime = getLongExtra(ChooseParamsActivity.END_TIME, endTime) + initDefaultParamsUi() + queryData() + } + } + } + + private fun initDefaultParamsUi() { + if (startTime < 0) { + startTime = System.currentTimeMillis() - DEFAULT_QUERY_TIME_INTERVAL + } + if (endTime < 0) { + endTime = System.currentTimeMillis() + } + val startTimeStr = DateUtils.formatHistoryTime(this.startTime) + val endTimeStr = DateUtils.formatHistoryTime(this.endTime) + mBinding.tvParams.text = + "时间: $startTimeStr——$endTimeStr" + } + + private fun queryData() { + lifecycleScope.launch { + val videoDao = DBUtils.videoDao() + val videos = videoDao.getAllByTime(startTime, endTime) + + launch(Dispatchers.Main) { + mAdapter.setData(videos) + } + } + } + override fun initView() { + mBinding.tvModifyParams.setOnClickListener { + paramsLauncher.launch( + ChooseParamsActivity.open( + this@HistoryVideoActivity, + startTime, + endTime, + ) + ) + } + mBinding.rvData.layoutManager = LinearLayoutManager(this@HistoryVideoActivity) + mBinding.rvData.adapter = mAdapter + + initDefaultParamsUi() + queryData() } private fun export2Upan() { diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/HistoryVideoAdapter.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/HistoryVideoAdapter.kt new file mode 100644 index 0000000..3d6ade6 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/HistoryVideoAdapter.kt @@ -0,0 +1,43 @@ +package com.yinuo.safetywatcher.watcher.ui.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import com.yinuo.safetywatcher.databinding.LayoutItemHistoryBinding +import com.yinuo.safetywatcher.watcher.base.BaseRvAdapter +import com.common.commonlib.db.entity.Video +import com.yinuo.safetywatcher.watcher.utils.DateUtils + +class HistoryVideoAdapter : + BaseRvAdapter() { + + class HViewHolder( + val binding: LayoutItemHistoryBinding, + val mItemClickListener: OnItemClickListener? + ) : + BaseRvAdapter.BaseViewHolder(binding) { + override fun bindView(data: Video) { + binding.tvTime.text = formatTime(data.time) + binding.tvSensor.text = data.path + + binding.root.setOnClickListener { + mItemClickListener?.onItemClick(data) + } + } + + private fun formatTime(time: Long): CharSequence? { + return DateUtils.formatHistoryTime(time) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HViewHolder { + val binding = + LayoutItemHistoryBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return HViewHolder(binding, mItemClickListener) + } + + var mItemClickListener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onItemClick(data: Video) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_history_video.xml b/app/src/main/res/layout/activity_history_video.xml index 0994f79..a2344f3 100644 --- a/app/src/main/res/layout/activity_history_video.xml +++ b/app/src/main/res/layout/activity_history_video.xml @@ -1,7 +1,34 @@ + android:layout_height="match_parent" + android:orientation="vertical"> + + + + + + + + @Query("SELECT * FROM video WHERE time BETWEEN :startTime AND :endTime") + suspend fun getAllByTime(startTime: Long, endTime: Long): List