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