-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMediaItemTrackerList.kt
75 lines (68 loc) · 2.04 KB
/
MediaItemTrackerList.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
* Copyright (c) SRG SSR. All rights reserved.
* License information is available from the LICENSE file.
*/
package ch.srgssr.pillarbox.player.tracker
/**
* Trackers hold a list of [MediaItemTracker].
*
* val trackers = mediaItem.getTrackers()
* trackers.append(trackerA)
*
* @constructor Create empty Trackers.
*/
class MediaItemTrackerList internal constructor() : Iterable<MediaItemTracker> {
private val listTracker = mutableListOf<MediaItemTracker>()
/**
* Immutable list of [MediaItemTracker].
*/
val list: List<MediaItemTracker> = listTracker
/**
* The number of [MediaItemTracker] appended.
*/
val size: Int
get() = list.size
/**
* Append tracker to the list. You can append only one type of Tracker.
*
* @param tracker The track to add.
* @return true if the tracker was successfully added, false otherwise.
*/
fun append(tracker: MediaItemTracker): Boolean {
if (listTracker.none { it::class.java == tracker::class.java }) {
listTracker.add(tracker)
return true
}
return false
}
/**
* Appends multiple MediaTracker at once.
*
* @param trackers The MediaTracker list to append.
* @return false if one of the trackers is already added.
*/
fun appends(vararg trackers: MediaItemTracker): Boolean {
var added = true
for (tracker in trackers) {
val currentAdded = append(tracker)
if (!currentAdded) {
added = false
}
}
return added
}
/**
* Find [MediaItemTracker] from T
*
* @param T The [MediaItemTracker] type to find.
* @param trackerClass The class to find.
* @return null if not found.
*/
@Suppress("UNCHECKED_CAST")
fun <T : MediaItemTracker> findTracker(trackerClass: Class<T>): T? {
return listTracker.find { it::class.java == trackerClass } as T?
}
override fun iterator(): Iterator<MediaItemTracker> {
return list.iterator()
}
}