add remaining time to player
This commit is contained in:
parent
d3f078c661
commit
e51fb0b290
|
@ -8,10 +8,7 @@ import android.view.View
|
||||||
import android.view.WindowInsets
|
import android.view.WindowInsets
|
||||||
import android.view.WindowInsetsController
|
import android.view.WindowInsetsController
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.google.android.exoplayer2.ExoPlayer
|
import com.google.android.exoplayer2.*
|
||||||
import com.google.android.exoplayer2.MediaItem
|
|
||||||
import com.google.android.exoplayer2.Player
|
|
||||||
import com.google.android.exoplayer2.SimpleExoPlayer
|
|
||||||
import com.google.android.exoplayer2.source.hls.HlsMediaSource
|
import com.google.android.exoplayer2.source.hls.HlsMediaSource
|
||||||
import com.google.android.exoplayer2.ui.StyledPlayerControlView
|
import com.google.android.exoplayer2.ui.StyledPlayerControlView
|
||||||
import com.google.android.exoplayer2.upstream.DataSource
|
import com.google.android.exoplayer2.upstream.DataSource
|
||||||
|
@ -19,6 +16,7 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
|
||||||
import com.google.android.exoplayer2.util.Util
|
import com.google.android.exoplayer2.util.Util
|
||||||
import kotlinx.android.synthetic.main.activity_player.*
|
import kotlinx.android.synthetic.main.activity_player.*
|
||||||
import kotlinx.android.synthetic.main.player_controls.*
|
import kotlinx.android.synthetic.main.player_controls.*
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class PlayerActivity : AppCompatActivity() {
|
class PlayerActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
@ -31,6 +29,7 @@ class PlayerActivity : AppCompatActivity() {
|
||||||
private var playWhenReady = true
|
private var playWhenReady = true
|
||||||
private var currentWindow = 0
|
private var currentWindow = 0
|
||||||
private var playbackPosition: Long = 0
|
private var playbackPosition: Long = 0
|
||||||
|
private var remainingTime: Long = 0
|
||||||
|
|
||||||
private val rwdTime = 10000
|
private val rwdTime = 10000
|
||||||
private val fwdTime = 10000
|
private val fwdTime = 10000
|
||||||
|
@ -98,7 +97,7 @@ class PlayerActivity : AppCompatActivity() {
|
||||||
|
|
||||||
player = SimpleExoPlayer.Builder(this).build()
|
player = SimpleExoPlayer.Builder(this).build()
|
||||||
dataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, "Teapod"))
|
dataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, "Teapod"))
|
||||||
controller = video_view.findViewById<StyledPlayerControlView>(R.id.exo_controller)
|
controller = video_view.findViewById(R.id.exo_controller)
|
||||||
|
|
||||||
val mediaSource = HlsMediaSource.Factory(dataSourceFactory)
|
val mediaSource = HlsMediaSource.Factory(dataSourceFactory)
|
||||||
.createMediaSource(MediaItem.fromUri(Uri.parse(streamUrl)))
|
.createMediaSource(MediaItem.fromUri(Uri.parse(streamUrl)))
|
||||||
|
@ -127,12 +126,27 @@ class PlayerActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// disable controls animation (time-bar) TODO enable and hide time to end with animation
|
|
||||||
controller.isAnimationEnabled = false
|
|
||||||
|
|
||||||
// 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 {
|
||||||
if (it == View.GONE) hideBars()
|
if (it == View.GONE) {
|
||||||
|
hideBars()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.isAnimationEnabled = false // disable controls (time-bar) animation
|
||||||
|
controller.setProgressUpdateListener { _, _ ->
|
||||||
|
remainingTime = player.duration - player.currentPosition
|
||||||
|
|
||||||
|
val hours = TimeUnit.MILLISECONDS.toHours(remainingTime) % 24
|
||||||
|
val minutes = TimeUnit.MILLISECONDS.toMinutes(remainingTime) % 60
|
||||||
|
val seconds = TimeUnit.MILLISECONDS.toSeconds(remainingTime) % 60
|
||||||
|
|
||||||
|
// if remaining time is below 60 minutes, don't show hours
|
||||||
|
exo_remaining.text = if (TimeUnit.MILLISECONDS.toMinutes(remainingTime) < 60) {
|
||||||
|
getString(R.string.time_min_sec, minutes, seconds)
|
||||||
|
} else {
|
||||||
|
getString(R.string.time_hour_min_sec, hours, minutes, seconds)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
video_view.player = player
|
video_view.player = player
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
|
android:animateLayoutChanges="true"
|
||||||
app:fastforward_increment="10000"
|
app:fastforward_increment="10000"
|
||||||
app:rewind_increment="10000"
|
app:rewind_increment="10000"
|
||||||
app:controller_layout_id="@layout/player_controls"/>
|
app:controller_layout_id="@layout/player_controls"/>
|
||||||
|
|
|
@ -75,13 +75,13 @@
|
||||||
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_duration"
|
app:layout_constraintEnd_toStartOf="@+id/exo_remaining"
|
||||||
app:layout_constraintStart_toEndOf="@+id/exo_position"
|
app:layout_constraintStart_toEndOf="@+id/exo_position"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/exo_duration"
|
android:id="@+id/exo_remaining"
|
||||||
style="@style/ExoStyledControls.TimeText.Duration"
|
style="@style/ExoStyledControls.TimeText.Position"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
|
@ -48,6 +48,8 @@
|
||||||
<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>
|
||||||
|
|
Loading…
Reference in New Issue