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 {
putExtra(getString(R.string.intent_stream_url), streamUrl)
putExtra(getString(R.string.intent_title), title)
}
startActivity(intent)
}

View File

@ -25,6 +25,7 @@ class PlayerActivity : AppCompatActivity() {
private lateinit var controller: StyledPlayerControlView
private var streamUrl = ""
private var title = ""
private var playWhenReady = true
private var currentWindow = 0
@ -45,6 +46,7 @@ class PlayerActivity : AppCompatActivity() {
playWhenReady = it.getBoolean(getString(R.string.state_is_playing))
}
streamUrl = intent.getStringExtra(getString(R.string.intent_stream_url)).toString()
title = intent.getStringExtra(getString(R.string.intent_title)).toString()
initActions()
}
@ -107,7 +109,6 @@ class PlayerActivity : AppCompatActivity() {
player.seekTo(playbackPosition)
player.prepare()
player.addListener(object : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) {
super.onPlaybackStateChanged(state)
@ -125,6 +126,7 @@ class PlayerActivity : AppCompatActivity() {
}
}
})
video_view.player = player
// when the player controls get hidden, hide the bars too
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() {
exo_close_player.setOnClickListener {
this.finish()
}
exo_rew_10.setOnClickListener {
player.seekTo(player.currentPosition - rwdTime)
}
@ -167,6 +173,8 @@ class PlayerActivity : AppCompatActivity() {
currentWindow = player.currentWindowIndex
playWhenReady = player.playWhenReady
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")
(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"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
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
android:id="@+id/exo_main_controls"
android:layout_width="match_parent"
@ -24,7 +51,8 @@
style="@style/ExoStyledControls.Button.Center.RewWithAmount"
android:layout_width="42dp"
android:layout_height="42dp"
android:tint="@color/exo_white"/>
android:contentDescription="@string/rewind_10"
android:tint="@color/exo_white" />
<Space
@ -37,7 +65,8 @@
style="@style/ExoStyledControls.Button.Center.PlayPause"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_gravity="center" />
android:layout_gravity="center"
android:contentDescription="@string/play_pause" />
<Space
android:layout_width="0dp"
@ -48,7 +77,8 @@
android:id="@+id/exo_ffwd_10"
style="@style/ExoStyledControls.Button.Center.FfwdWithAmount"
android:layout_width="42dp"
android:layout_height="42dp" />
android:layout_height="42dp"
android:contentDescription="@string/forward_10" />
<Space
android:layout_width="0dp"
@ -57,26 +87,21 @@
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/exo_time_controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginStart="7dp"
android:layout_marginEnd="7dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
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
android:id="@+id/exo_progress_placeholder"
android:layout_width="0dp"
android:layout_height="@dimen/exo_styled_progress_layout_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/exo_remaining"
app:layout_constraintStart_toEndOf="@+id/exo_position"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
@ -87,5 +112,4 @@
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@ -30,6 +30,11 @@
<string name="settings_secondary">Bevorzuge alternativen Stream</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 -->
<string name="save">speichern</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_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 -->
<string name="save">save</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_failed_desc">Could not login. Please try again.</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 -->
<string name="encrypted_preference_file_key" translatable="false">org.mosad.teapod.encrypted_preferences</string>
@ -60,6 +66,7 @@
<!-- intents & states -->
<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_position" translatable="false">state_resume_position</string>
<string name="state_is_playing" translatable="false">state_is_playing</string>