1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2010 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef ANDROID_IMEDIADEATHNOTIFIER_H 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define ANDROID_IMEDIADEATHNOTIFIER_H 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/threads.h> 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaPlayerService.h> 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/SortedVector.h> 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IMediaDeathNotifier: virtual public RefBase 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{ 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman IMediaDeathNotifier() { addObitRecipient(this); } 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual ~IMediaDeathNotifier() { removeObitRecipient(this); } 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual void died() = 0; 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static const sp<IMediaPlayerService> getMediaPlayerService(); 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate: 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman IMediaDeathNotifier &operator=(const IMediaDeathNotifier &); 37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman IMediaDeathNotifier(const IMediaDeathNotifier &); 38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static void addObitRecipient(const wp<IMediaDeathNotifier>& recipient); 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static void removeObitRecipient(const wp<IMediaDeathNotifier>& recipient); 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman class DeathNotifier: public IBinder::DeathRecipient 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman { 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman public: 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman DeathNotifier() {} 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual ~DeathNotifier(); 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual void binderDied(const wp<IBinder>& who); 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman }; 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman friend class DeathNotifier; 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static Mutex sServiceLock; 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static sp<IMediaPlayerService> sMediaPlayerService; 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static sp<DeathNotifier> sDeathNotifier; 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static SortedVector< wp<IMediaDeathNotifier> > sObitRecipients; 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; // namespace android 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // ANDROID_IMEDIADEATHNOTIFIER_H 62