1 /*
2  * Copyright 2015, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MEDIA_BATTERY_NOTIFIER_H
18 #define MEDIA_BATTERY_NOTIFIER_H
19 
20 #include <binder/IBatteryStats.h>
21 #include <utils/Singleton.h>
22 #include <utils/String8.h>
23 
24 #include <map>
25 #include <utility>
26 
27 namespace android {
28 
29 /**
30  * Class used for logging battery life events in mediaserver.
31  */
32 class BatteryNotifier : public Singleton<BatteryNotifier> {
33 
34     friend class Singleton<BatteryNotifier>;
35     BatteryNotifier();
36 
37 public:
38     ~BatteryNotifier();
39 
40     void noteStartVideo(uid_t uid);
41     void noteStopVideo(uid_t uid);
42     void noteResetVideo();
43     void noteStartAudio(uid_t uid);
44     void noteStopAudio(uid_t uid);
45     void noteResetAudio();
46     void noteFlashlightOn(const String8& id, uid_t uid);
47     void noteFlashlightOff(const String8& id, uid_t uid);
48     void noteResetFlashlight();
49     void noteStartCamera(const String8& id, uid_t uid);
50     void noteStopCamera(const String8& id, uid_t uid);
51     void noteResetCamera();
52 
53 private:
54     void onBatteryStatServiceDied();
55 
56     class DeathNotifier : public IBinder::DeathRecipient {
57         virtual void binderDied(const wp<IBinder>& /*who*/);
58     };
59 
60     Mutex mLock;
61     std::map<uid_t, int> mVideoRefCounts;
62     std::map<uid_t, int> mAudioRefCounts;
63     std::map<std::pair<String8, uid_t>, bool> mFlashlightState;
64     std::map<std::pair<String8, uid_t>, bool> mCameraState;
65     sp<IBatteryStats> mBatteryStatService;
66     sp<DeathNotifier> mDeathNotifier;
67 
68     sp<IBatteryStats> getBatteryService_l();
69 };
70 
71 }  // namespace android
72 
73 #endif // MEDIA_BATTERY_NOTIFIER_H
74