expo-libvlc-player 5.0.3 → 5.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,7 +42,7 @@ class LibVlcPlayerModule : Module() {
42
42
  }
43
43
 
44
44
  OnActivityEntersForeground {
45
- MediaPlayerManager.keepAwakeManager.activateKeepAwake()
45
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
46
46
  MediaPlayerManager.onModuleForeground()
47
47
  }
48
48
 
@@ -638,7 +638,7 @@ fun LibVlcPlayerView.setPlayerListener(player: MediaPlayer) {
638
638
 
639
639
  attachPlayer()
640
640
 
641
- MediaPlayerManager.keepAwakeManager.activateKeepAwake()
641
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
642
642
 
643
643
  retryUntil {
644
644
  val volume = player.getVolume()
@@ -651,7 +651,7 @@ fun LibVlcPlayerView.setPlayerListener(player: MediaPlayer) {
651
651
  Event.Paused -> {
652
652
  onPaused(Unit)
653
653
 
654
- MediaPlayerManager.keepAwakeManager.deactivateKeepAwake()
654
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
655
655
  MediaPlayerManager.audioFocusManager.updateAudioFocus()
656
656
  }
657
657
 
@@ -660,7 +660,7 @@ fun LibVlcPlayerView.setPlayerListener(player: MediaPlayer) {
660
660
 
661
661
  detachPlayer()
662
662
 
663
- MediaPlayerManager.keepAwakeManager.deactivateKeepAwake()
663
+ MediaPlayerManager.keepAwakeManager.toggleKeepAwake()
664
664
  MediaPlayerManager.audioFocusManager.updateAudioFocus()
665
665
  }
666
666
 
@@ -8,6 +8,7 @@ import android.os.Build
8
8
  import expo.modules.kotlin.AppContext
9
9
  import expo.modules.kotlin.exception.CodedException
10
10
  import expo.modules.kotlin.exception.Exceptions
11
+ import expo.modules.libvlcplayer.LibVlcPlayerView
11
12
  import expo.modules.libvlcplayer.constants.MediaPlayerConstants
12
13
  import expo.modules.libvlcplayer.enums.AudioMixingMode
13
14
  import kotlinx.coroutines.launch
@@ -25,11 +26,14 @@ class AudioFocusManager(
25
26
  }
26
27
  }
27
28
 
29
+ private val playerViews: MutableSet<LibVlcPlayerView>
30
+ get() = MediaPlayerManager.playerViews
31
+
28
32
  private var currentFocusRequest: AudioFocusRequest? = null
29
33
 
30
34
  private val anyPlayerRequiresFocus: Boolean
31
35
  get() =
32
- MediaPlayerManager.playerViews.any { view ->
36
+ playerViews.any { view ->
33
37
  playerRequiresFocus(view.mediaPlayer)
34
38
  }
35
39
 
@@ -41,7 +45,7 @@ class AudioFocusManager(
41
45
  appContext.mainQueue.launch {
42
46
  when (focusChange) {
43
47
  AudioManager.AUDIOFOCUS_LOSS -> {
44
- MediaPlayerManager.playerViews.forEach { view ->
48
+ playerViews.forEach { view ->
45
49
  pausePlayerIfUnmuted(view.mediaPlayer)
46
50
  }
47
51
 
@@ -55,7 +59,7 @@ class AudioFocusManager(
55
59
  return@launch
56
60
  }
57
61
 
58
- MediaPlayerManager.playerViews.forEach { view ->
62
+ playerViews.forEach { view ->
59
63
  pausePlayerIfUnmuted(view.mediaPlayer)
60
64
  }
61
65
 
@@ -65,7 +69,7 @@ class AudioFocusManager(
65
69
  AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
66
70
  val audioMixingMode = findAudioMixingMode()
67
71
 
68
- MediaPlayerManager.playerViews.forEach { view ->
72
+ playerViews.forEach { view ->
69
73
  if (audioMixingMode == AudioMixingMode.DO_NOT_MIX) {
70
74
  pausePlayerIfUnmuted(view.mediaPlayer)
71
75
  } else {
@@ -75,7 +79,7 @@ class AudioFocusManager(
75
79
  }
76
80
 
77
81
  AudioManager.AUDIOFOCUS_GAIN -> {
78
- MediaPlayerManager.playerViews.forEach { view ->
82
+ playerViews.forEach { view ->
79
83
  unduckPlayer(view.mediaPlayer)
80
84
  }
81
85
  }
@@ -102,7 +106,7 @@ class AudioFocusManager(
102
106
 
103
107
  private fun findAudioMixingMode(): AudioMixingMode {
104
108
  val mixingModes =
105
- MediaPlayerManager.playerViews
109
+ playerViews
106
110
  .filter { view -> view.mediaPlayer?.isPlaying() == true }
107
111
  .map { view -> view.audioMixingMode }
108
112
 
@@ -11,6 +11,12 @@ class KeepAwakeManager(
11
11
  private val activity: Activity
12
12
  get() = appContext.currentActivity ?: throw Exceptions.MissingActivity()
13
13
 
14
+ private val anyPlayingView: Boolean
15
+ get() =
16
+ MediaPlayerManager.playerViews.any { view ->
17
+ view.mediaPlayer?.isPlaying() == true
18
+ }
19
+
14
20
  fun activateKeepAwake() {
15
21
  activity.let { activity ->
16
22
  activity.runOnUiThread {
@@ -26,4 +32,12 @@ class KeepAwakeManager(
26
32
  }
27
33
  }
28
34
  }
35
+
36
+ fun toggleKeepAwake() {
37
+ if (anyPlayingView) {
38
+ activateKeepAwake()
39
+ } else {
40
+ deactivateKeepAwake()
41
+ }
42
+ }
29
43
  }
@@ -31,7 +31,7 @@ public class LibVlcPlayerModule: Module {
31
31
  }
32
32
 
33
33
  OnAppEntersForeground {
34
- MediaPlayerManager.shared.keepAwakeManager.activateKeepAwake()
34
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
35
35
  MediaPlayerManager.shared.onModuleForeground()
36
36
  }
37
37
 
@@ -136,18 +136,18 @@ class LibVlcPlayerView: ExpoView {
136
136
  }
137
137
 
138
138
  func setContentFit() {
139
- DispatchQueue.main.async {
140
- let view = self.playerView
139
+ DispatchQueue.main.async { [self] in
140
+ let view = playerView
141
141
  var transform: CGAffineTransform = .identity
142
142
 
143
- if let player = self.mediaPlayer {
143
+ if let player = mediaPlayer {
144
144
  let video = player.videoSize
145
145
 
146
- if self.hasVideoSize() {
146
+ if hasVideoSize() {
147
147
  let viewAspect = view.frame.size.width / view.frame.size.height
148
148
  let videoAspect = video.width / video.height
149
149
 
150
- switch self.contentFit {
150
+ switch contentFit {
151
151
  case .contain:
152
152
  // No transform required
153
153
  break
@@ -504,14 +504,14 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
504
504
  onPlaying()
505
505
 
506
506
  if firstPlay {
507
- retryUntil {
508
- self.onFirstPlay(self.getMediaInfo())
509
- return self.hasAudioVideo()
507
+ retryUntil { [self] in
508
+ onFirstPlay(getMediaInfo())
509
+ return hasAudioVideo()
510
510
  }
511
511
 
512
- retryUntil {
513
- self.setContentFit()
514
- return self.hasVideoSize()
512
+ retryUntil { [self] in
513
+ setContentFit()
514
+ return hasVideoSize()
515
515
  }
516
516
 
517
517
  setupPlayer()
@@ -519,10 +519,10 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
519
519
  firstPlay = false
520
520
  }
521
521
 
522
- MediaPlayerManager.shared.keepAwakeManager.activateKeepAwake()
522
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
523
523
 
524
524
  retryUntil {
525
- let volume = Int(player.audio?.volume ?? Int32(MediaPlayerConstants.minPlayerVolume))
525
+ let volume = player.audio?.volume ?? Int32(MediaPlayerConstants.minPlayerVolume)
526
526
  let hasVolume = volume > MediaPlayerConstants.minPlayerVolume
527
527
  MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
528
528
  return hasVolume
@@ -530,12 +530,12 @@ extension LibVlcPlayerView: VLCMediaPlayerDelegate {
530
530
  case .paused:
531
531
  onPaused()
532
532
 
533
- MediaPlayerManager.shared.keepAwakeManager.deactivateKeepAwake()
533
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
534
534
  MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
535
535
  case .stopped:
536
536
  onStopped()
537
537
 
538
- MediaPlayerManager.shared.keepAwakeManager.deactivateKeepAwake()
538
+ MediaPlayerManager.shared.keepAwakeManager.toggleKeepAwake()
539
539
  MediaPlayerManager.shared.audioSessionManager.setAppropriateAudioSession()
540
540
  case .ended:
541
541
  onEndReached()
@@ -7,6 +7,8 @@ class AudioSessionManager {
7
7
 
8
8
  private static let managerQueue = DispatchQueue(label: "audioManagerQueue")
9
9
 
10
+ private lazy var playerViews = MediaPlayerManager.shared.playerViews
11
+
10
12
  func setAppropriateAudioSession() {
11
13
  Self.managerQueue.async { [weak self] in
12
14
  self?.setAudioSession()
@@ -18,7 +20,7 @@ class AudioSessionManager {
18
20
  let audioMixingMode = findAudioMixingMode()
19
21
  var audioSessionCategoryOptions: AVAudioSession.CategoryOptions = audioSession.categoryOptions
20
22
 
21
- let isOutputtingAudio = MediaPlayerManager.shared.playerViews.allObjects.contains { view in
23
+ let isOutputtingAudio = playerViews.allObjects.contains { view in
22
24
  if let player = view.mediaPlayer, let audio = player.audio {
23
25
  player.isPlaying && audio.volume > MediaPlayerConstants.minPlayerVolume
24
26
  } else {
@@ -62,7 +64,7 @@ class AudioSessionManager {
62
64
  }
63
65
 
64
66
  private func findAudioMixingMode() -> AudioMixingMode? {
65
- let playingViews = MediaPlayerManager.shared.playerViews.allObjects.filter { view in
67
+ let playingViews = playerViews.allObjects.filter { view in
66
68
  view.mediaPlayer?.isPlaying == true
67
69
  }
68
70
 
@@ -72,8 +74,8 @@ class AudioSessionManager {
72
74
  return nil
73
75
  }
74
76
 
75
- for playerView in playingViews where (audioMixingMode.priority()) < playerView.audioMixingMode.priority() {
76
- audioMixingMode = playerView.audioMixingMode
77
+ for view in playingViews where (audioMixingMode.priority()) < view.audioMixingMode.priority() {
78
+ audioMixingMode = view.audioMixingMode
77
79
  }
78
80
 
79
81
  return audioMixingMode
@@ -1,6 +1,10 @@
1
1
  class KeepAwakeManager {
2
2
  static let shared = KeepAwakeManager()
3
3
 
4
+ private lazy var anyPlayingView = MediaPlayerManager.shared.playerViews.allObjects.contains { view in
5
+ view.mediaPlayer?.isPlaying == true
6
+ }
7
+
4
8
  func activateKeepAwake() {
5
9
  DispatchQueue.main.async {
6
10
  UIApplication.shared.isIdleTimerDisabled = true
@@ -12,4 +16,12 @@ class KeepAwakeManager {
12
16
  UIApplication.shared.isIdleTimerDisabled = false
13
17
  }
14
18
  }
19
+
20
+ func toggleKeepAwake() {
21
+ if anyPlayingView {
22
+ activateKeepAwake()
23
+ } else {
24
+ deactivateKeepAwake()
25
+ }
26
+ }
15
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-libvlc-player",
3
- "version": "5.0.3",
3
+ "version": "5.0.4",
4
4
  "description": "LibVLC Player for Expo",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",