Add basic playback info dialog

This commit is contained in:
Maxr1998
2020-08-20 11:54:59 +02:00
parent 531a115ecd
commit 1539f5124b
6 changed files with 71 additions and 3 deletions
@@ -4,8 +4,10 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.PopupMenu
import android.widget.TextView
import androidx.core.view.forEach
import androidx.core.view.get
import androidx.core.view.isVisible
import androidx.core.view.size
import org.jellyfin.mobile.R
import org.jellyfin.mobile.player.source.ExoPlayerTracksGroup
@@ -17,8 +19,10 @@ import org.jellyfin.mobile.player.source.JellyfinMediaSource
class PlaybackMenus(private val activity: PlayerActivity) : PopupMenu.OnDismissListener {
private val subtitlesButton: View = activity.findViewById(R.id.subtitles_button)
private val audioStreamsButton: View = activity.findViewById(R.id.audio_streams_button)
private val infoButton: View = activity.findViewById(R.id.info_button)
private val subtitlesMenu: PopupMenu = createSubtitlesMenu()
private val audioStreamsMenu: PopupMenu = createAudioStreamsMenu()
val playbackInfo: TextView = activity.findViewById(R.id.playback_info)
init {
subtitlesButton.setOnClickListener {
@@ -29,11 +33,24 @@ class PlaybackMenus(private val activity: PlayerActivity) : PopupMenu.OnDismissL
activity.suppressControllerAutoHide(true)
audioStreamsMenu.show()
}
infoButton.setOnClickListener {
activity.suppressControllerAutoHide(true)
playbackInfo.isVisible = !playbackInfo.isVisible
}
}
fun onItemChanged(item: JellyfinMediaSource) {
buildMenuItems(subtitlesMenu.menu, SUBTITLES_MENU_GROUP, item.subtitleTracksGroup, true)
buildMenuItems(audioStreamsMenu.menu, AUDIO_MENU_GROUP, item.audioTracksGroup)
playbackInfo.text = activity.getString(R.string.playback_info,
item.isTranscoding,
item.videoTracksGroup.tracks.joinToString("\n") { video ->
"- ${video.title}"
},
item.audioTracksGroup.tracks.joinToString("\n") { audio ->
"- ${audio.title} (${audio.language})"
}
)
}
private fun createSubtitlesMenu() = PopupMenu(activity, subtitlesButton).apply {
@@ -172,6 +172,9 @@ class PlayerActivity : AppCompatActivity() {
// Handle double tap gesture on controls
val gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean {
if (playbackMenus.playbackInfo.isVisible)
return true
val viewWidth = playerView.measuredWidth
val viewHeight = playerView.measuredHeight
val viewCenterX = viewWidth / 2
@@ -202,8 +205,13 @@ class PlayerActivity : AppCompatActivity() {
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
playerView.apply {
if (!isControllerVisible) showController()
else hideController()
if (!isControllerVisible) {
showController()
} else {
if (playbackMenus.playbackInfo.isVisible)
playbackMenus.playbackInfo.isVisible = false
hideController()
}
}
return true
}
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ffffff"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z" />
</vector>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="16dp" />
<solid android:color="@android:color/black" />
</shape>
@@ -77,6 +77,22 @@
app:layout_constraintStart_toEndOf="@id/play_pause_container"
app:layout_constraintTop_toTopOf="@id/play_pause_container" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/playback_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/exo_player_controls_display_padding"
android:background="@drawable/playback_info_background"
android:clickable="true"
android:padding="16dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/exo_progress"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/track_title"
tools:ignore="KeyboardInaccessibleWidget"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/exo_position"
android:layout_width="wrap_content"
@@ -144,6 +160,17 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/audio_streams_button" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/info_button"
android:layout_width="@dimen/exo_bottom_controls_size"
android:layout_height="@dimen/exo_bottom_controls_size"
android:layout_marginBottom="@dimen/exo_bottom_controls_margin"
android:background="@drawable/ripple_background_circular"
android:padding="@dimen/exo_bottom_controls_padding"
android:src="@drawable/ic_info_white_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/subtitles_button" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/fullscreen_switcher"
android:layout_width="@dimen/exo_bottom_controls_size"
@@ -155,4 +182,4 @@
android:src="@drawable/ic_fullscreen_enter_white_32dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
+1
View File
@@ -18,6 +18,7 @@
<string name="downloading">Downloading</string>
<string name="menu_item_none">None</string>
<string name="playback_info">Transcoding: %b\n\nVideo streams:\n%s\n\nAudio streams:\n%s</string>
<string name="activity_name_settings">Jellyfin Settings</string>
<string name="pref_category_music_player">Music player</string>