콘텐츠 상세

- 10초 전/후로 이동 기능 추가
This commit is contained in:
klaus 2025-04-08 13:19:52 +09:00
parent 01dc0cabbe
commit dfb2c903a4
3 changed files with 85 additions and 3 deletions

View File

@ -203,6 +203,14 @@ class AudioContentPlayService :
}
}
MusicAction.SEEK_BACKWARD.name -> {
seekBackward10Seconds()
}
MusicAction.SEEK_FORWARD.name -> {
seekForward10Seconds()
}
else -> {
val contentId = intent?.getLongExtra(Constants.EXTRA_AUDIO_CONTENT_ID, 0)
if (contentId != null && this.contentId == contentId) {
@ -314,6 +322,23 @@ class AudioContentPlayService :
}
}
private fun seekForward10Seconds() {
if (this::mediaPlayer.isInitialized && mediaPlayer.isPlaying) {
val currentPosition = mediaPlayer.currentPosition
val duration = mediaPlayer.duration
val newPosition = (currentPosition + 10_000).coerceAtMost(duration)
mediaPlayer.seekTo(newPosition)
}
}
private fun seekBackward10Seconds() {
if (this::mediaPlayer.isInitialized && mediaPlayer.isPlaying) {
val currentPosition = mediaPlayer.currentPosition
val newPosition = (currentPosition - 10_000).coerceAtLeast(0)
mediaPlayer.seekTo(newPosition)
}
}
private fun toggleIsPlaying(isPlaying: Boolean? = null) {
this.isPlaying = isPlaying ?: !this.isPlaying
if (this.isPlaying) {
@ -578,6 +603,6 @@ class AudioContentPlayService :
}
enum class MusicAction {
PLAY, PAUSE, STOP, PROGRESS, INIT, CONDITIONAL_STOP
PLAY, PAUSE, STOP, PROGRESS, INIT, CONDITIONAL_STOP, SEEK_FORWARD, SEEK_BACKWARD
}
}

View File

@ -719,6 +719,8 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
binding.flSoldOut.visibility = View.GONE
binding.tvSoldOutBig.visibility = View.GONE
binding.ivPlayOrPause.visibility = View.GONE
binding.ivSeekBackward10.visibility = View.GONE
binding.ivSeekForward10.visibility = View.GONE
binding.tvPreviewNo.visibility = View.GONE
binding.tvTotalDuration.text = " / ${response.duration}"
@ -741,12 +743,18 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
binding.ivPlayOrPause.visibility = View.VISIBLE
binding.ivPlayOrPause.setOnClickListener {
startService(
Intent(applicationContext, AudioContentPlayerService::class.java).apply {
Intent(
applicationContext,
AudioContentPlayerService::class.java
).apply {
action = "STOP_SERVICE"
}
)
startService(
Intent(this, AudioContentPlayService::class.java).apply {
Intent(
applicationContext,
AudioContentPlayService::class.java
).apply {
putExtra(
Constants.EXTRA_AUDIO_CONTENT_COVER_IMAGE_URL,
response.coverImageUrl
@ -775,6 +783,33 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
R.drawable.btn_audio_content_preview_play
}
)
if (!isAlertPreview) {
binding.ivSeekForward10.visibility = View.VISIBLE
binding.ivSeekBackward10.visibility = View.VISIBLE
binding.ivSeekForward10.setOnClickListener {
startService(
Intent(
applicationContext,
AudioContentPlayService::class.java
).apply {
action = AudioContentPlayService.MusicAction.SEEK_FORWARD.name
}
)
}
binding.ivSeekBackward10.setOnClickListener {
startService(
Intent(
applicationContext,
AudioContentPlayService::class.java
).apply {
action = AudioContentPlayService.MusicAction.SEEK_BACKWARD.name
}
)
}
}
} else if (response.releaseDate == null) {
binding.tvPreviewNo.visibility = View.VISIBLE
}

View File

@ -109,6 +109,17 @@
android:contentDescription="@null"
android:scaleType="centerCrop" />
<ImageView
android:id="@+id/iv_seek_backward_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="24dp"
android:layout_toStartOf="@+id/iv_play_or_pause"
android:contentDescription="@null"
android:src="@drawable/ic_player_prev_10"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_play_or_pause"
android:layout_width="wrap_content"
@ -118,6 +129,17 @@
android:visibility="gone"
tools:src="@drawable/btn_audio_content_play" />
<ImageView
android:id="@+id/iv_seek_forward_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="24dp"
android:layout_toEndOf="@+id/iv_play_or_pause"
android:contentDescription="@null"
android:src="@drawable/ic_player_next_10"
android:visibility="gone" />
<TextView
android:id="@+id/tv_preview_no"
android:layout_width="wrap_content"