UNPKG

react-native-studia

Version:
75 lines (63 loc) 2.57 kB
// @flow 'use strict' import { State } from '../Types'; import { NetworkInterface, Broadcast, NetworkModule } from '../StudiaModules'; import { StudiaManager } from '../StudiaManager'; export class Wifi implements NetworkInterface { _manager: StudiaManager _networking: ?string constructor(manager: StudiaManager, networking: string) { this._manager = manager this._networking = networking } /*check() : Promise<void> { return this._manager.enable(this._name); }*/ enable() : Promise<void> { return this._manager.enable(this._networking) } disable() : Promise<void> { return this._manager.disable(this._networking) } getState() : Promise<Broadcast> { return this._manager.getState(this._networking) } onStateChange(listener: (newState: $Keys<typeof State>, status: ?string, canEnable: boolean ) => void, emitCurrentState: boolean = false): Subscription { const stateListener = ([state, status, canEnable]: [$Keys<typeof State>, ?string, boolean]) => { listener(state, status, canEnable) } const subscription: Subscription = this._manager._eventEmitter.addListener(NetworkModule.WifiStateChangeEvent, stateListener) const id = this._manager._nextUniqueID() var wrappedSubscription: Subscription if (emitCurrentState) { var cancelled = false this.getState().then((receiver) => { if (!cancelled) { listener(receiver.state, receiver.status, receiver.canEnable) } }) wrappedSubscription = { remove: () => { if (this._manager._activeSubscriptions[id] != null) { cancelled = true delete this._manager._activeSubscriptions[id] subscription.remove() } } } } else { wrappedSubscription = { remove: () => { if (this._manager._activeSubscriptions[id] != null) { delete this._manager._activeSubscriptions[id] subscription.remove() } } } } this._manager._activeSubscriptions[id] = wrappedSubscription return wrappedSubscription } }