void RegisterSwitchObserver(hal::SwitchDevice aDevice, hal::SwitchObserver *aObserver) { AssertMainThread(); SwitchObserverList& observer = GetSwitchObserverList(aDevice); observer.AddObserver(aObserver); if (observer.Length() == 1) { EnableSwitchNotifications(aDevice); } }
void NotifySwitchChange(const hal::SwitchEvent& aEvent) { // When callback this notification, main thread may call unregister function // first. We should check if this pointer is valid. if (!sSwitchObserverLists) return; SwitchObserverList& observer = GetSwitchObserverList(aEvent.device()); observer.Broadcast(aEvent); }
void UnregisterSwitchObserver(hal::SwitchDevice aDevice, hal::SwitchObserver *aObserver) { AssertMainThread(); SwitchObserverList& observer = GetSwitchObserverList(aDevice); observer.RemoveObserver(aObserver); if (observer.Length() == 0) { DisableSwitchNotifications(aDevice); ReleaseObserversIfNeeded(); } }
void UnregisterSwitchObserver(SwitchDevice aDevice, SwitchObserver *aObserver) { AssertMainThread(); if (!sSwitchObserverLists) { return; } SwitchObserverList& observer = GetSwitchObserverList(aDevice); if (!observer.RemoveObserver(aObserver) || observer.Length() > 0) { return; } DisableSwitchNotifications(aDevice); ReleaseObserversIfNeeded(); }