player interface part 2

* replace current time position with remaining time
* show title and back button at the top
This commit is contained in:
Jannik 2020-11-07 18:23:09 +01:00
parent e51fb0b290
commit 27e8e1c3c2
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
7 changed files with 70 additions and 20 deletions

View File

@ -151,9 +151,10 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
} }
} }
fun startPlayer(streamUrl: String) { fun startPlayer(streamUrl: String, title: String) {
val intent = Intent(this, PlayerActivity::class.java).apply { val intent = Intent(this, PlayerActivity::class.java).apply {
putExtra(getString(R.string.intent_stream_url), streamUrl) putExtra(getString(R.string.intent_stream_url), streamUrl)
putExtra(getString(R.string.intent_title), title)
} }
startActivity(intent) startActivity(intent)
} }

View File

@ -25,6 +25,7 @@ class PlayerActivity : AppCompatActivity() {
private lateinit var controller: StyledPlayerControlView private lateinit var controller: StyledPlayerControlView
private var streamUrl = "" private var streamUrl = ""
private var title = ""
private var playWhenReady = true private var playWhenReady = true
private var currentWindow = 0 private var currentWindow = 0
@ -45,6 +46,7 @@ class PlayerActivity : AppCompatActivity() {
playWhenReady = it.getBoolean(getString(R.string.state_is_playing)) playWhenReady = it.getBoolean(getString(R.string.state_is_playing))
} }
streamUrl = intent.getStringExtra(getString(R.string.intent_stream_url)).toString() streamUrl = intent.getStringExtra(getString(R.string.intent_stream_url)).toString()
title = intent.getStringExtra(getString(R.string.intent_title)).toString()
initActions() initActions()
} }
@ -107,7 +109,6 @@ class PlayerActivity : AppCompatActivity() {
player.seekTo(playbackPosition) player.seekTo(playbackPosition)
player.prepare() player.prepare()
player.addListener(object : Player.EventListener { player.addListener(object : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) { override fun onPlaybackStateChanged(state: Int) {
super.onPlaybackStateChanged(state) super.onPlaybackStateChanged(state)
@ -125,6 +126,7 @@ class PlayerActivity : AppCompatActivity() {
} }
} }
}) })
video_view.player = player
// when the player controls get hidden, hide the bars too // when the player controls get hidden, hide the bars too
video_view.setControllerVisibilityListener { video_view.setControllerVisibilityListener {
@ -149,10 +151,14 @@ class PlayerActivity : AppCompatActivity() {
} }
} }
video_view.player = player exo_text_title.text = title // set media title
} }
private fun initActions() { private fun initActions() {
exo_close_player.setOnClickListener {
this.finish()
}
exo_rew_10.setOnClickListener { exo_rew_10.setOnClickListener {
player.seekTo(player.currentPosition - rwdTime) player.seekTo(player.currentPosition - rwdTime)
} }
@ -167,6 +173,8 @@ class PlayerActivity : AppCompatActivity() {
currentWindow = player.currentWindowIndex currentWindow = player.currentWindowIndex
playWhenReady = player.playWhenReady playWhenReady = player.playWhenReady
player.release() player.release()
Log.d(javaClass.name, "Released player")
} }
/** /**

View File

@ -164,7 +164,7 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
} }
Log.d(javaClass.name, "Playing stream: $streamUrl") Log.d(javaClass.name, "Playing stream: $streamUrl")
(activity as MainActivity).startPlayer(streamUrl) (activity as MainActivity).startPlayer(streamUrl, ep.title)
} }
} }

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
</vector>

View File

@ -1,11 +1,38 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#73000000"> android:background="#73000000">
<LinearLayout
android:id="@+id/exo_top_controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="7dp"
android:layout_marginEnd="12dp"
android:gravity="center"
android:orientation="horizontal">
<ImageButton
android:id="@+id/exo_close_player"
style="@style/ExoStyledControls.Button.Center"
android:layout_width="34dp"
android:layout_height="34dp"
android:contentDescription="@string/close_player"
app:srcCompat="@drawable/ic_baseline_arrow_back_24" />
<TextView
android:id="@+id/exo_text_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="34dp"
android:text="@string/text_title_ex"
android:textAlignment="center"
android:textColor="@color/exo_white" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/exo_main_controls" android:id="@+id/exo_main_controls"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -24,7 +51,8 @@
style="@style/ExoStyledControls.Button.Center.RewWithAmount" style="@style/ExoStyledControls.Button.Center.RewWithAmount"
android:layout_width="42dp" android:layout_width="42dp"
android:layout_height="42dp" android:layout_height="42dp"
android:tint="@color/exo_white"/> android:contentDescription="@string/rewind_10"
android:tint="@color/exo_white" />
<Space <Space
@ -37,7 +65,8 @@
style="@style/ExoStyledControls.Button.Center.PlayPause" style="@style/ExoStyledControls.Button.Center.PlayPause"
android:layout_width="52dp" android:layout_width="52dp"
android:layout_height="52dp" android:layout_height="52dp"
android:layout_gravity="center" /> android:layout_gravity="center"
android:contentDescription="@string/play_pause" />
<Space <Space
android:layout_width="0dp" android:layout_width="0dp"
@ -48,7 +77,8 @@
android:id="@+id/exo_ffwd_10" android:id="@+id/exo_ffwd_10"
style="@style/ExoStyledControls.Button.Center.FfwdWithAmount" style="@style/ExoStyledControls.Button.Center.FfwdWithAmount"
android:layout_width="42dp" android:layout_width="42dp"
android:layout_height="42dp" /> android:layout_height="42dp"
android:contentDescription="@string/forward_10" />
<Space <Space
android:layout_width="0dp" android:layout_width="0dp"
@ -57,26 +87,21 @@
</LinearLayout> </LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/exo_time_controls"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_marginStart="7dp" android:layout_marginStart="12dp"
android:layout_marginEnd="7dp" android:layout_marginEnd="12dp"
android:layout_marginBottom="@dimen/exo_styled_progress_margin_bottom"> android:layout_marginBottom="@dimen/exo_styled_progress_margin_bottom">
<TextView
android:id="@+id/exo_position"
style="@style/ExoStyledControls.TimeText.Position"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View <View
android:id="@+id/exo_progress_placeholder" android:id="@+id/exo_progress_placeholder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/exo_styled_progress_layout_height" android:layout_height="@dimen/exo_styled_progress_layout_height"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/exo_remaining" app:layout_constraintEnd_toStartOf="@+id/exo_remaining"
app:layout_constraintStart_toEndOf="@+id/exo_position" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
@ -87,5 +112,4 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout> </FrameLayout>

View File

@ -30,6 +30,11 @@
<string name="settings_secondary">Bevorzuge alternativen Stream</string> <string name="settings_secondary">Bevorzuge alternativen Stream</string>
<string name="settings_secondary_desc">Untertitle-Stream verwenden, sofern vorhanden</string> <string name="settings_secondary_desc">Untertitle-Stream verwenden, sofern vorhanden</string>
<!-- player -->
<string name="close_player">Player schließen</string>
<string name="rewind_10">10 Sekunden zurück</string>
<string name="play_pause">Abspielen/Pause</string>
<string name="forward_10">10 Sekunden vorwärts</string>
<!-- dialogs --> <!-- dialogs -->
<string name="save">speichern</string> <string name="save">speichern</string>
<string name="cancel">@android:string/cancel</string> <string name="cancel">@android:string/cancel</string>

View File

@ -39,6 +39,14 @@
<string name="settings_secondary">Prefer secondary (sub) stream</string> <string name="settings_secondary">Prefer secondary (sub) stream</string>
<string name="settings_secondary_desc">Use the subtitles stream if present</string> <string name="settings_secondary_desc">Use the subtitles stream if present</string>
<!-- player -->
<string name="close_player">close player</string>
<string name="rewind_10">rewind 10 seconds</string>
<string name="play_pause">play/pause</string>
<string name="forward_10">forward 10 seconds</string>
<string name="time_min_sec" translatable="false">%1$02d:%2$02d</string>
<string name="time_hour_min_sec" translatable="false">%1$d:%2$02d:%3$02d</string>
<!-- dialogs --> <!-- dialogs -->
<string name="save">save</string> <string name="save">save</string>
<string name="cancel">@android:string/cancel</string> <string name="cancel">@android:string/cancel</string>
@ -48,8 +56,6 @@
<string name="login_desc">You need to login before you can use Teapod. The Login-Data will be stored encrypted on your device.</string> <string name="login_desc">You need to login before you can use Teapod. The Login-Data will be stored encrypted on your device.</string>
<string name="login_failed_desc">Could not login. Please try again.</string> <string name="login_failed_desc">Could not login. Please try again.</string>
<string name="password">Password</string> <string name="password">Password</string>
<string name="time_min_sec" translatable="false">%1$02d:%2$02d</string>
<string name="time_hour_min_sec" translatable="false">%1$d:%2$02d:%3$02d</string>
<!-- save keys --> <!-- save keys -->
<string name="encrypted_preference_file_key" translatable="false">org.mosad.teapod.encrypted_preferences</string> <string name="encrypted_preference_file_key" translatable="false">org.mosad.teapod.encrypted_preferences</string>
@ -60,6 +66,7 @@
<!-- intents & states --> <!-- intents & states -->
<string name="intent_stream_url" translatable="false">intent_stream_url</string> <string name="intent_stream_url" translatable="false">intent_stream_url</string>
<string name="intent_title" translatable="false">intent_title</string>
<string name="state_resume_window" translatable="false">state_resume_window</string> <string name="state_resume_window" translatable="false">state_resume_window</string>
<string name="state_resume_position" translatable="false">state_resume_position</string> <string name="state_resume_position" translatable="false">state_resume_position</string>
<string name="state_is_playing" translatable="false">state_is_playing</string> <string name="state_is_playing" translatable="false">state_is_playing</string>