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