srcs: [
"src/activity_attribution.cc",
],
+ shared_libs: [
+ "android.system.suspend.control-ndk",
+ "libbinder_ndk",
+ ],
apex_available: [
"//apex_available:platform",
"com.android.bluetooth.updatable",
#pragma once
+#include <aidl/android/system/suspend/BnSuspendCallback.h>
#include <hardware/bt_activity_attribution.h>
+using aidl::android::system::suspend::BnSuspendCallback;
+using Status = ::ndk::ScopedAStatus;
+
namespace bluetooth {
namespace activity_attribution {
class ActivityAttribution {
static void Initialize(ActivityAttributionCallbacks* callbacks);
};
+class WakeupCallback : public BnSuspendCallback {
+ public:
+ Status notifyWakeup(bool success,
+ const std::vector<std::string>& wakeupReasons) override;
+};
+
} // namespace activity_attribution
} // namespace bluetooth
#include "activity_attribution.h"
+#include <aidl/android/system/suspend/ISuspendControlService.h>
+#include <android/binder_manager.h>
#include <base/logging.h>
+using aidl::android::system::suspend::ISuspendCallback;
+using aidl::android::system::suspend::ISuspendControlService;
+using namespace ndk;
+
namespace bluetooth {
namespace activity_attribution {
class ActivityAttributionImpl;
+static std::shared_ptr<ISuspendControlService> controlService;
static std::unique_ptr<ActivityAttributionImpl> instance;
class ActivityAttributionImpl : public ActivityAttribution {
~ActivityAttributionImpl() override = default;
ActivityAttributionImpl(ActivityAttributionCallbacks* callbacks);
+ void onWakeup(bool success, const std::vector<std::string>& wakeupReasons);
+
private:
[[maybe_unused]] ActivityAttributionCallbacks* mCallbacks;
};
ActivityAttributionCallbacks* callbacks)
: mCallbacks(callbacks) {}
+void ActivityAttributionImpl::onWakeup(
+ bool success, const std::vector<std::string>& wakeupReasons) {}
+
+Status WakeupCallback::notifyWakeup(
+ bool success, const std::vector<std::string>& wakeupReasons) {
+ instance->onWakeup(success, wakeupReasons);
+ return Status::ok();
+}
+
void ActivityAttribution::CleanUp() { instance.reset(); };
void ActivityAttribution::Initialize(ActivityAttributionCallbacks* callbacks) {
+ bool is_registered = false;
+
if (instance) {
LOG(ERROR) << __func__ << " Already initialized!";
return;
}
instance.reset(new ActivityAttributionImpl(callbacks));
+
+ controlService = ISuspendControlService::fromBinder(
+ SpAIBinder(AServiceManager_getService("suspend_control")));
+ if (!controlService) {
+ LOG(ERROR) << __func__ << " Fail to obtain suspend_control";
+ return;
+ }
+
+ Status register_callback_status = controlService->registerCallback(
+ SharedRefBase::make<WakeupCallback>(), &is_registered);
+ if (!is_registered || !register_callback_status.isOk()) {
+ LOG(ERROR) << __func__ << " Fail to register wakeup callback";
+ return;
+ }
}
} // namespace activity_attribution
"libmedia_headers",
],
shared_libs: [
+ "android.hardware.bluetooth.a2dp@1.0",
+ "android.hardware.bluetooth.audio@2.0",
+ "android.system.suspend.control-ndk",
"libaaudio",
+ "libcrypto",
"libcutils",
"libfmq",
+ "libhidlbase",
"liblog",
- "libz",
"libtinyxml2",
- "android.hardware.bluetooth.a2dp@1.0",
- "android.hardware.bluetooth.audio@2.0",
- "libhidlbase",
"libutils",
- "libcrypto",
+ "libz",
],
whole_static_libs: [
"avrcp-target-service",
],
logtags: ["../EventLogTags.logtags"],
shared_libs: [
- "android.hardware.bluetooth@1.0",
- "android.hardware.bluetooth@1.1",
"android.hardware.bluetooth.a2dp@1.0",
"android.hardware.bluetooth.audio@2.0",
+ "android.hardware.bluetooth@1.0",
+ "android.hardware.bluetooth@1.1",
+ "android.system.suspend.control-ndk",
"libaaudio",
+ "libbinder_ndk",
+ "libcrypto",
"libcutils",
"libdl",
"libflatbuffers-cpp",
"liblog",
"libprocessgroup",
"libprotobuf-cpp-lite",
- "libutils",
"libtinyxml2",
+ "libutils",
"libz",
- "libcrypto",
],
static_libs: [
"libbte",
"android.hardware.bluetooth.audio@2.0",
"android.hardware.bluetooth@1.0",
"android.hardware.bluetooth@1.1",
+ "android.system.suspend.control-ndk",
"libaaudio",
"libbase",
+ "libbinder_ndk",
"libcrypto",
"libcutils", // property_get_bool
"libfmq",