@@ -9,27 +9,32 @@ import de.simon.dankelmann.bluetoothlespam.Enums.AdvertisementQueueMode
9
9
import de.simon.dankelmann.bluetoothlespam.Enums.TxPowerLevel
10
10
import de.simon.dankelmann.bluetoothlespam.Helpers.QueueHandlerHelpers
11
11
import de.simon.dankelmann.bluetoothlespam.Interfaces.Callbacks.IAdvertisementServiceCallback
12
+ import de.simon.dankelmann.bluetoothlespam.Interfaces.Callbacks.IAdvertisementSetQueueHandlerCallback
12
13
import de.simon.dankelmann.bluetoothlespam.Interfaces.Services.IAdvertisementService
13
14
import de.simon.dankelmann.bluetoothlespam.Models.AdvertisementSet
14
15
import de.simon.dankelmann.bluetoothlespam.Models.AdvertisementSetCollection
15
16
import de.simon.dankelmann.bluetoothlespam.Models.AdvertisementSetList
17
+ import de.simon.dankelmann.bluetoothlespam.Services.AdvertisementForegroundService
16
18
import kotlin.random.Random
17
19
18
- class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
20
+ class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
19
21
20
22
// private
21
23
private var _logTag = " AdvertisementSetQueuHandler"
22
24
private var _advertisementService : IAdvertisementService ? = null
23
25
private var _advertisementSetCollection : AdvertisementSetCollection = AdvertisementSetCollection ()
24
26
private var _interval : Long = 1000
25
27
private var _advertisementServiceCallbacks : MutableList <IAdvertisementServiceCallback > = mutableListOf ()
28
+ private var _advertisementQueueHandlerCallbacks : MutableList <IAdvertisementSetQueueHandlerCallback > = mutableListOf ()
29
+
26
30
private var _active = false
27
31
private var _advertisementQueueMode : AdvertisementQueueMode = AdvertisementQueueMode .ADVERTISEMENT_QUEUE_MODE_LINEAR
28
32
29
33
private var _currentAdvertisementSet : AdvertisementSet ? = null
30
34
private var _currentAdvertisementSetListIndex = 0
31
35
private var _currentAdvertisementSetIndex = 0
32
36
37
+
33
38
init {
34
39
_advertisementService = AppContext .getAdvertisementService()
35
40
if (_advertisementService != null ){
@@ -69,7 +74,9 @@ class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
69
74
}
70
75
71
76
fun setAdvertisementSetCollection (advertisementSetCollection : AdvertisementSetCollection ){
72
- _advertisementSetCollection = advertisementSetCollection
77
+ if (_advertisementSetCollection != advertisementSetCollection){
78
+ _advertisementSetCollection = advertisementSetCollection
79
+ }
73
80
74
81
// Reset indices
75
82
_currentAdvertisementSet = null
@@ -109,6 +116,17 @@ class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
109
116
}
110
117
}
111
118
119
+ fun addAdvertisementQueueHandlerCallback (callback : IAdvertisementSetQueueHandlerCallback ){
120
+ if (! _advertisementQueueHandlerCallbacks .contains(callback)){
121
+ _advertisementQueueHandlerCallbacks .add(callback)
122
+ }
123
+ }
124
+ fun removeAdvertisementQueueHandlerCallback (callback : IAdvertisementSetQueueHandlerCallback ){
125
+ if (_advertisementQueueHandlerCallbacks .contains(callback)){
126
+ _advertisementQueueHandlerCallbacks .remove(callback)
127
+ }
128
+ }
129
+
112
130
fun setIntervalSeconds (seconds : Int ){
113
131
_interval = (seconds * 1000 ).toLong()
114
132
}
@@ -119,19 +137,48 @@ class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
119
137
}
120
138
}
121
139
122
- fun activate (){
123
- _active = true
124
- if (_currentAdvertisementSet != null ){
125
- handleAdvertisementSet(_currentAdvertisementSet !! )
126
- } else {
127
- advertiseNextAdvertisementSet()
140
+ fun activate (startService : Boolean = true){
141
+ if (! _active ){
142
+ _active = true
143
+
144
+ if (startService){
145
+ AdvertisementForegroundService .startService(AppContext .getContext(), " Foreground Service is running..." )
146
+ }
147
+
148
+ _advertisementQueueHandlerCallbacks .forEach { it ->
149
+ try {
150
+ it.onQueueHandlerActivated()
151
+ } catch (e: Exception ){
152
+ Log .e(_logTag , " Error while executing AdvertisementQueueHandlerCallback onQueueHandlerActivated" )
153
+ }
154
+ }
155
+
156
+ if (_currentAdvertisementSet != null ){
157
+ handleAdvertisementSet(_currentAdvertisementSet !! )
158
+ } else {
159
+ advertiseNextAdvertisementSet()
160
+ }
128
161
}
129
162
}
130
163
131
- fun deactivate (){
164
+ fun deactivate (stopService : Boolean = false ){
132
165
_active = false
133
- if (_advertisementService != null ){
134
- _advertisementService !! .stopAdvertisement()
166
+
167
+ if (AppContext .getAdvertisementService() != null ){
168
+ AppContext .getAdvertisementService().stopAdvertisement()
169
+ }
170
+
171
+ if (stopService){
172
+ Log .d(_logTag , " Stopping Foreground Service" )
173
+ AdvertisementForegroundService .stopService(AppContext .getActivity())
174
+ }
175
+
176
+ _advertisementQueueHandlerCallbacks .forEach { it ->
177
+ try {
178
+ it.onQueueHandlerDeactivated()
179
+ } catch (e: Exception ){
180
+ Log .e(_logTag , " Error while executing AdvertisementQueueHandlerCallback onQueueHandlerDeactivated" )
181
+ }
135
182
}
136
183
}
137
184
@@ -287,13 +334,21 @@ class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
287
334
// Callback Implementation, just pass to own Listeners
288
335
override fun onAdvertisementSetStart (advertisementSet : AdvertisementSet ? ) {
289
336
_advertisementServiceCallbacks .map {
290
- it.onAdvertisementSetStart(advertisementSet)
337
+ try {
338
+ it.onAdvertisementSetStart(advertisementSet)
339
+ } catch (e: Exception ){
340
+ Log .e(_logTag , " Error in: onAdvertisementSetStart ${e.message} " )
341
+ }
291
342
}
292
343
}
293
344
294
345
override fun onAdvertisementSetStop (advertisementSet : AdvertisementSet ? ) {
295
346
_advertisementServiceCallbacks .map {
296
- it.onAdvertisementSetStop(advertisementSet)
347
+ try {
348
+ it.onAdvertisementSetStop(advertisementSet)
349
+ } catch (e: Exception ){
350
+ Log .e(_logTag , " Error in: onAdvertisementSetStop ${e.message} " )
351
+ }
297
352
}
298
353
299
354
if (_advertisementService != null && ! _advertisementService !! .isLegacyService()){
@@ -304,14 +359,22 @@ class AdvertisementSetQueueHandler :IAdvertisementServiceCallback {
304
359
override fun onAdvertisementSetSucceeded (advertisementSet : AdvertisementSet ? ) {
305
360
runLocalCallback(true )
306
361
_advertisementServiceCallbacks .map {
307
- it.onAdvertisementSetSucceeded(advertisementSet)
362
+ try {
363
+ it.onAdvertisementSetSucceeded(advertisementSet)
364
+ } catch (e: Exception ){
365
+ Log .e(_logTag , " Error in: onAdvertisementSetSucceeded ${e.message} " )
366
+ }
308
367
}
309
368
}
310
369
311
370
override fun onAdvertisementSetFailed (advertisementSet : AdvertisementSet ? , advertisementError : AdvertisementError ) {
312
371
runLocalCallback(false )
313
372
_advertisementServiceCallbacks .map {
314
- it.onAdvertisementSetFailed(advertisementSet, advertisementError)
373
+ try {
374
+ it.onAdvertisementSetFailed(advertisementSet, advertisementError)
375
+ } catch (e: Exception ){
376
+ Log .e(_logTag , " Error in: onAdvertisementSetFailed ${e.message} " )
377
+ }
315
378
}
316
379
}
317
380
}
0 commit comments