1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.kernel.services.sensors
3 
4 import host.exp.exponent.kernel.ExperienceKey
5 
6 class SensorKernelServiceSubscription internal constructor(
7   val experienceKey: ExperienceKey,
8   private val subscribableSensorKernelService: SubscribableSensorKernelService,
9   val sensorEventListener: SensorEventListener
10 ) {
11   var updateInterval: Long? = null
12     private set
13   private var hasBeenReleased = false
14 
startnull15   fun start() {
16     assertSubscriptionIsAlive()
17     if (!_isEnabled) {
18       _isEnabled = true
19       subscribableSensorKernelService.onSubscriptionEnabledChanged(this)
20     }
21   }
22 
23   private var _isEnabled = false
24   val isEnabled: Boolean
25     get() = !hasBeenReleased && _isEnabled
26 
setUpdateIntervalnull27   fun setUpdateInterval(updateInterval: Long) {
28     assertSubscriptionIsAlive()
29     this.updateInterval = updateInterval
30   }
31 
stopnull32   fun stop() {
33     assertSubscriptionIsAlive()
34     if (_isEnabled) {
35       _isEnabled = false
36       subscribableSensorKernelService.onSubscriptionEnabledChanged(this)
37     }
38   }
39 
releasenull40   fun release() {
41     assertSubscriptionIsAlive()
42     subscribableSensorKernelService.removeSubscription(this)
43     hasBeenReleased = true
44   }
45 
assertSubscriptionIsAlivenull46   private fun assertSubscriptionIsAlive() {
47     check(!hasBeenReleased) { "Subscription has been released, cannot call methods on a released subscription." }
48   }
49 }
50