/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MEDIA_BATTERY_NOTIFIER_H
#define MEDIA_BATTERY_NOTIFIER_H
#include <binder/IBatteryStats.h>
#include <utils/Singleton.h>
#include <utils/String8.h>
#include <map>
#include <utility>
namespace android {
/**
* Class used for logging battery life events in mediaserver.
*/
class BatteryNotifier : public Singleton<BatteryNotifier> {
friend class Singleton<BatteryNotifier>;
BatteryNotifier();
public:
~BatteryNotifier();
void noteStartVideo(uid_t uid);
void noteStopVideo(uid_t uid);
void noteResetVideo();
void noteStartAudio(uid_t uid);
void noteStopAudio(uid_t uid);
void noteResetAudio();
void noteFlashlightOn(const String8& id, uid_t uid);
void noteFlashlightOff(const String8& id, uid_t uid);
void noteResetFlashlight();
void noteStartCamera(const String8& id, uid_t uid);
void noteStopCamera(const String8& id, uid_t uid);
void noteResetCamera();
private:
void onBatteryStatServiceDied();
class DeathNotifier : public IBinder::DeathRecipient {
virtual void binderDied(const wp<IBinder>& /*who*/);
};
Mutex mLock;
std::map<uid_t, int> mVideoRefCounts;
std::map<uid_t, int> mAudioRefCounts;
std::map<std::pair<String8, uid_t>, bool> mFlashlightState;
std::map<std::pair<String8, uid_t>, bool> mCameraState;
sp<IBatteryStats> mBatteryStatService;
sp<DeathNotifier> mDeathNotifier;
sp<IBatteryStats> getBatteryService_l();
};
} // namespace android
#endif // MEDIA_BATTERY_NOTIFIER_H