class Extension { constructor(dnd, toggle, indicator, remote, audio){ this.dnd = dnd; this.toggle = toggle; this.indicator = indicator; this.remote = remote; this.audio = audio; this.enabled = false; this.toggle.setToggleState(this.dnd.isEnabled()); this.toggle.show(); this.toggle.onToggleStateChanged(() => { if (this.toggle.getToggleState()){ this.enable(); } else { this.disable(); } }); // this.dndID = this.dnd.addStatusListener((dndEnabled) => this._setDND(dndEnabled)); this.remoteID = this.remote.addRemoteListener((dndEnabled) => this._setDND(dndEnabled)); this._setDND(this.remote.getRemote()); } _setDND(enabled){ if (enabled){ this.enable(); } else { this.disable(); } } /** * Enable do not disturb mode */ enable(){ if (this.enabled){ return; } this.enabled = true; this.dnd.enable(); this.toggle.setToggleState(true); this.indicator.show(); this.remote.setRemote(true); this.audio.mute(); } /** * Disable do not disturb mode */ disable(){ if (!this.enabled){ return; } this.enabled = false; this.dnd.disable(); this.toggle.setToggleState(false); this.indicator.hide(); this.remote.setRemote(false); this.audio.unmute(); } /** * @return {Boolean} true if it is enabled, otherwise false */ isEnabled(){ return this.enabled; } /** * Destroy the extension and its components */ destroy(){ this.enabled = false; // this.dnd.removeStatusListener(this.dndID); this.remote.removeRemoteListener(this.remoteID); this.toggle.destroy(); this.indicator.destroy(); this.dnd.disable(); } }