AHandlerReflector.h revision 5994b4798b01f3dd340577c9ea9657f09093a770
15994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber#ifndef A_HANDLER_REFLECTOR_H_
25994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
35994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber#define A_HANDLER_REFLECTOR_H_
45994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
55994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber#include <media/stagefright/foundation/AHandler.h>
65994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
75994b4798b01f3dd340577c9ea9657f09093a770Andreas Hubernamespace android {
85994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
95994b4798b01f3dd340577c9ea9657f09093a770Andreas Hubertemplate<class T>
105994b4798b01f3dd340577c9ea9657f09093a770Andreas Huberstruct AHandlerReflector : public AHandler {
115994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    AHandlerReflector(T *target)
125994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber        : mTarget(target) {
135994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    }
145994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
155994b4798b01f3dd340577c9ea9657f09093a770Andreas Huberprotected:
165994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    virtual void onMessageReceived(const sp<AMessage> &msg) {
175994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber        sp<T> target = mTarget.promote();
185994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber        if (target != NULL) {
195994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber            target->onMessageReceived(msg);
205994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber        }
215994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    }
225994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
235994b4798b01f3dd340577c9ea9657f09093a770Andreas Huberprivate:
245994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    wp<T> mTarget;
255994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
265994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    AHandlerReflector(const AHandlerReflector<T> &);
275994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber    AHandlerReflector<T> &operator=(const AHandlerReflector<T> &);
285994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber};
295994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
305994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber}  // namespace android
315994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber
325994b4798b01f3dd340577c9ea9657f09093a770Andreas Huber#endif  // A_HANDLER_REFLECTOR_H_
33