blob: 18317091e1e74987d834cb1093ac14bd18d7f063 [file] [log] [blame]
/*
* Copyright (C) 2015-2017 Intel Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "CameraEvent"
#include "iutils/CameraLog.h"
#include "CameraEvent.h"
namespace icamera {
EventSource::EventSource()
{
LOG1("@%s EventSource created", __func__);
}
EventSource::~EventSource()
{
LOG1("@%s EventSource destructed", __func__);
}
void EventSource::registerListener(EventType eventType, EventListener* eventListener)
{
LOG1("@%s eventType: %d, listener: %p", __func__, eventType, eventListener);
CheckError(eventListener == nullptr, VOID_VALUE,
"%s: event listener is nullptr, skip registration.", __func__);
AutoMutex l(mListenersLock);
std::set<EventListener*> listenersOfType;
if (mListeners.find(eventType) != mListeners.end()) {
listenersOfType = mListeners[eventType];
}
listenersOfType.insert(eventListener);
mListeners[eventType] = listenersOfType;
}
void EventSource::removeListener(EventType eventType, EventListener* eventListener)
{
LOG1("@%s eventType: %d, listener: %p", __func__, eventType, eventListener);
AutoMutex l(mListenersLock);
if (mListeners.find(eventType) == mListeners.end()) {
LOG1("%s: no listener found for event type %d", __func__, eventType);
return;
}
std::set<EventListener*> listenersOfType = mListeners[eventType];
listenersOfType.erase(eventListener);
mListeners[eventType] = listenersOfType;
}
void EventSource::notifyListeners(EventData eventData)
{
LOG2("@%s eventType: %d", __func__, eventData.type);
AutoMutex l(mListenersLock);
if (mListeners.find(eventData.type) == mListeners.end()){
LOG2("%s: no listener found for event type %d", __func__, eventData.type);
return;
}
for (auto listener : mListeners[eventData.type]) {
LOG2("%s: send event data to listener %p for event type %d", __func__, listener, eventData.type);
listener->handleEvent(eventData);
}
}
}