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