[Android] Implement the new scheduler in the audio player activity
Nicolas Pomepuy
git at videolan.org
Tue Jul 25 14:57:29 UTC 2023
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Jul 20 11:54:42 2023 +0200| [ee95a3e3002a2a67503f31f7b3b56577734838df] | committer: Duncan McNamara
Implement the new scheduler in the audio player activity
> https://code.videolan.org/videolan/vlc-android/commit/ee95a3e3002a2a67503f31f7b3b56577734838df
---
.../vlc/gui/AudioPlayerContainerActivity.kt | 51 +++++++++++-----------
1 file changed, 25 insertions(+), 26 deletions(-)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt
index 4035cd7a6b..89d135965b 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt
@@ -27,7 +27,7 @@ import android.annotation.SuppressLint
import android.media.AudioManager
import android.os.Bundle
import android.os.Handler
-import android.os.Message
+import android.os.Looper
import android.view.*
import android.widget.FrameLayout
import android.widget.ProgressBar
@@ -38,6 +38,7 @@ import androidx.appcompat.widget.ViewStubCompat
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.graphics.Insets
import androidx.core.net.toUri
+import androidx.core.os.bundleOf
import androidx.core.view.*
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
@@ -63,6 +64,8 @@ import org.videolan.vlc.gui.helpers.*
import org.videolan.vlc.gui.helpers.UiTools.isTablet
import org.videolan.vlc.interfaces.IRefreshable
import org.videolan.vlc.media.PlaylistManager
+import org.videolan.vlc.util.LifecycleAwareScheduler
+import org.videolan.vlc.util.SchedulerCallback
import org.videolan.vlc.util.isTalkbackIsEnabled
import kotlin.math.max
import kotlin.math.min
@@ -70,15 +73,15 @@ import kotlin.math.min
private const val TAG = "VLC/APCActivity"
-private const val ACTION_DISPLAY_PROGRESSBAR = 1339
-private const val ACTION_SHOW_PLAYER = 1340
-private const val ACTION_HIDE_PLAYER = 1341
+private const val ACTION_DISPLAY_PROGRESSBAR = "action_display_progressbar"
+private const val ACTION_SHOW_PLAYER = "action_show_player"
+private const val ACTION_HIDE_PLAYER = "action_hide_player"
private const val BOTTOM_IS_HIDDEN = "bottom_is_hidden"
private const val PLAYER_OPENED = "player_opened"
private const val SHOWN_TIPS = "shown_tips"
private const val BOOKMARK_VISIBLE: String = "bookmark_visible"
-open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
+open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener, SchedulerCallback {
private var bottomBar: BottomNavigationView? = null
lateinit var appBarLayout: AppBarLayout
@@ -113,8 +116,8 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
var bottomInset = 0
- @Suppress("LeakingThis")
- protected val handler: Handler = ProgressHandler(this)
+ lateinit var scheduler: LifecycleAwareScheduler
+ protected val handler: Handler = Handler(Looper.getMainLooper())
private var topInset: Int = 0
@@ -133,6 +136,8 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
}
override fun onCreate(savedInstanceState: Bundle?) {
+ scheduler = LifecycleAwareScheduler(this)
+
//Init Medialibrary if KO
if (savedInstanceState != null) {
this.startMedialibrary(firstRun = false, upgrade = false, parse = true)
@@ -395,7 +400,7 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
}
override fun onDestroy() {
- handler.removeMessages(ACTION_SHOW_PLAYER)
+ scheduler.cancelAction(ACTION_SHOW_PLAYER)
super.onDestroy()
}
@@ -476,7 +481,7 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
*/
private fun showAudioPlayer() {
if (isFinishing) return
- handler.sendEmptyMessageDelayed(ACTION_SHOW_PLAYER, 100L)
+ scheduler.scheduleAction(ACTION_SHOW_PLAYER, 100L)
}
private fun showAudioPlayerImpl() {
@@ -520,8 +525,8 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
*/
fun hideAudioPlayer() {
if (isFinishing) return
- handler.removeMessages(ACTION_SHOW_PLAYER)
- handler.sendEmptyMessage(ACTION_HIDE_PLAYER)
+ scheduler.cancelAction(ACTION_SHOW_PLAYER)
+ scheduler.startAction(ACTION_HIDE_PLAYER)
}
private fun hideAudioPlayerImpl() {
@@ -534,10 +539,9 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
val visibility = if (show) View.VISIBLE else View.GONE
if (scanProgressLayout?.visibility == visibility) return
if (show) {
- val msg = handler.obtainMessage(ACTION_DISPLAY_PROGRESSBAR, 0, 0, discovery)
- handler.sendMessageDelayed(msg, 1000L)
+ scheduler.scheduleAction(ACTION_DISPLAY_PROGRESSBAR, 1000L, bundleOf("discovery" to discovery))
} else {
- handler.removeMessages(ACTION_DISPLAY_PROGRESSBAR)
+ scheduler.cancelAction(ACTION_DISPLAY_PROGRESSBAR)
scanProgressLayout.setVisibility(visibility)
}
}
@@ -633,26 +637,21 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener {
if (::playerBehavior.isInitialized) playerBehavior.lock(lock)
}
- private class ProgressHandler(owner: AudioPlayerContainerActivity) : WeakHandler<AudioPlayerContainerActivity>(owner) {
-
- override fun handleMessage(msg: Message) {
- super.handleMessage(msg)
- val owner = owner ?: return
- when (msg.what) {
+ override fun onTaskTriggered(id: String, data: Bundle) {
+ when (id) {
ACTION_DISPLAY_PROGRESSBAR -> {
- removeMessages(ACTION_DISPLAY_PROGRESSBAR)
- owner.showProgressBar(msg.obj as String)
+ scheduler.cancelAction(ACTION_DISPLAY_PROGRESSBAR)
+ showProgressBar(data.getString("discovery", ""))
}
- ACTION_SHOW_PLAYER -> owner.run {
+ ACTION_SHOW_PLAYER -> {
if (this::resumeCard.isInitialized && resumeCard.isShown) resumeCard.dismiss()
showAudioPlayerImpl()
- if (::playerBehavior.isInitialized) owner.applyMarginToProgressBar(playerBehavior.peekHeight)
+ if (::playerBehavior.isInitialized) applyMarginToProgressBar(playerBehavior.peekHeight)
}
- ACTION_HIDE_PLAYER -> owner.run {
+ ACTION_HIDE_PLAYER -> {
hideAudioPlayerImpl()
applyMarginToProgressBar(0)
}
}
}
- }
}
More information about the Android
mailing list