package com.example.defenseapplication.liveVideo import android.content.res.Configuration import android.graphics.Color import android.os.Bundle import android.util.Log import android.view.View import android.widget.LinearLayout import android.widget.Toast import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import chuangyuan.ycj.videolibrary.listener.VideoInfoListener import chuangyuan.ycj.videolibrary.video.ExoUserPlayer import chuangyuan.ycj.videolibrary.video.VideoPlayerManager import com.example.defenseapplication.R import com.example.defenseapplication.adapter.AlarmLogAdapter import com.example.defenseapplication.databinding.AlarmLogActivityBinding import com.gyf.immersionbar.ImmersionBar import java.util.* import com.bigkoo.pickerview.builder.TimePickerBuilder import com.bigkoo.pickerview.listener.OnTimeSelectListener //告警记录 class AlarmLogActivity : AppCompatActivity() { private lateinit var binding: AlarmLogActivityBinding private lateinit var calendar: Calendar private var adapter: AlarmLogAdapter? = null private val alarmList = mutableListOf() private lateinit var exoPlayerManager: ExoUserPlayer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = AlarmLogActivityBinding.inflate(layoutInflater) setContentView(binding.root) ImmersionBar.with(this) .statusBarDarkFont(true) .titleBar(binding.exoPlayContextId) .init() calendar = Calendar.getInstance() updateDateDisplay() initVideoPlayer() initRecyclerView() loadAlarmList() initListener() onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { if (exoPlayerManager.onBackPressed()) { return } finish() } }) } private fun dpToPx(dp: Int): Int { val density = resources.displayMetrics.density return (dp * density).toInt() } private fun initVideoPlayer() { val videoPlayerView = binding.exoPlayContextId exoPlayerManager = VideoPlayerManager.Builder(VideoPlayerManager.TYPE_PLAY_GESTURE, videoPlayerView) .setPlayUri("https://media.w3.org/2010/05/sintel/trailer.mp4") .setPosition(0) .addVideoInfoListener(object : VideoInfoListener { override fun onPlayStart(p0: Long) { Log.d("AlarmLogActivity", "视频开始播放") } override fun onLoadingChanged() { // 视频加载状态变化 } override fun onPlayerError(p0: com.google.android.exoplayer2.ExoPlaybackException?) { Toast.makeText(this@AlarmLogActivity, "播放失败", Toast.LENGTH_SHORT).show() } override fun onPlayEnd() { Log.d("AlarmLogActivity", "播放结束") } override fun isPlaying(p0: Boolean) { // p0 表示当前是否正在播放 } fun onRepeatModeChanged(p0: Int) { // 循环模式改变时的回调 } }) .create() exoPlayerManager.startPlayer() } private fun initRecyclerView() { adapter = AlarmLogAdapter(alarmList) binding.alarmListRecyclerView.layoutManager = LinearLayoutManager(this) binding.alarmListRecyclerView.adapter = adapter } private fun loadAlarmList() { alarmList.clear() alarmList.add("入侵告警 - 10:30") alarmList.add("入侵告警 - 09:15") alarmList.add("入侵告警 - 08:45") alarmList.add("入侵告警 - 07:20") alarmList.add("入侵告警 - 06:50") adapter?.notifyDataSetChanged() } private fun updateDateDisplay() { val month = calendar.get(Calendar.MONTH) + 1 val day = calendar.get(Calendar.DAY_OF_MONTH) binding.tvDate.text = "${month}月${day}日" } private fun initListener() { binding.expandImg.setOnClickListener { showDatePicker() } } override fun onResume() { super.onResume() exoPlayerManager.onResume() } override fun onPause() { super.onPause() exoPlayerManager.onPause() } override fun onDestroy() { super.onDestroy() exoPlayerManager.onDestroy() } override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 进入横屏(全屏)模式 binding.titleLayout.visibility = View.GONE binding.alarmListRecyclerView.visibility = View.GONE val params = binding.exoPlayContextId.layoutParams params.width = LinearLayout.LayoutParams.MATCH_PARENT params.height = LinearLayout.LayoutParams.MATCH_PARENT binding.exoPlayContextId.layoutParams = params } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 进入竖屏(非全屏)模式 binding.titleLayout.visibility = View.VISIBLE binding.alarmListRecyclerView.visibility = View.VISIBLE val params = binding.exoPlayContextId.layoutParams params.width = LinearLayout.LayoutParams.MATCH_PARENT params.height = dpToPx(250) binding.exoPlayContextId.layoutParams = params } exoPlayerManager.onConfigurationChanged(newConfig) } private fun showDatePicker() { val timePicker = TimePickerBuilder(this, OnTimeSelectListener { date, _ -> calendar.time = date updateDateDisplay() loadAlarmList() }) .setType(booleanArrayOf(true, true, true, false, false, false)) // 年月日 .setTitleText(getString(R.string.select_date)) .setSubmitColor(Color.parseColor("#09C2BD"))//确定按钮文字颜色 .setCancelColor(Color.parseColor("#09C2BD"))//取消按钮文字颜色 .setSubCalSize(18)//确定和取消文字大小 .setTextColorCenter(Color.parseColor("#09C2BD"))//选中颜色 .setLineSpacingMultiplier(2.5f)//行间距倍数 .setItemVisibleCount(5)//可见项数量 .build() timePicker.show() } }