• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 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 #define LOG_TAG "bt_shim_activity_attribution"
18 #include "activity_attribution.h"
19 
20 #include "btif/include/btif_common.h"
21 #include "gd/btaa/activity_attribution.h"
22 #include "helpers.h"
23 #include "main/shim/entry.h"
24 #include "types/raw_address.h"
25 
26 class ActivityAttributionInterfaceImpl
27     : public ActivityAttributionInterface,
28       public bluetooth::activity_attribution::ActivityAttributionCallback {
29  public:
30   ~ActivityAttributionInterfaceImpl() override = default;
31 
GetInstance()32   static ActivityAttributionInterfaceImpl* GetInstance() {
33     static ActivityAttributionInterfaceImpl* instance =
34         new ActivityAttributionInterfaceImpl();
35     return instance;
36   }
37 
Init()38   void Init() override {
39     bluetooth::shim::GetActivityAttribution()
40         ->RegisterActivityAttributionCallback(this);
41   }
42 
RegisterCallbacks(ActivityAttributionCallbacks * callbacks)43   void RegisterCallbacks(ActivityAttributionCallbacks* callbacks) override {
44     this->callbacks = callbacks;
45   }
46 
Cleanup(void)47   void Cleanup(void) override{};
48 
NotifyActivityAttributionInfo(int uid,const std::string & package_name,const std::string & device_address)49   void NotifyActivityAttributionInfo(
50       int uid, const std::string& package_name,
51       const std::string& device_address) override {
52     bluetooth::shim::GetActivityAttribution()->NotifyActivityAttributionInfo(
53         uid, package_name, device_address);
54   }
55 
OnWakeup(const Activity activity,const bluetooth::hci::Address & address)56   void OnWakeup(const Activity activity,
57                 const bluetooth::hci::Address& address) override {
58     do_in_jni_thread(
59         FROM_HERE, base::Bind(&ActivityAttributionCallbacks::OnWakeup,
60                               base::Unretained(callbacks),
61                               (ActivityAttributionCallbacks::Activity)activity,
62                               bluetooth::ToRawAddress(address)));
63   }
64 
OnActivityLogsReady(const std::vector<BtaaAggregationEntry> logs)65   void OnActivityLogsReady(
66       const std::vector<BtaaAggregationEntry> logs) override {
67     std::vector<ActivityAttributionCallbacks::BtaaAggregationEntry>
68         callback_logs;
69     for (auto& it : logs) {
70       ActivityAttributionCallbacks::BtaaAggregationEntry entry{
71           bluetooth::ToRawAddress(it.address),
72           (ActivityAttributionCallbacks::Activity)it.activity, it.wakeup_count,
73           it.byte_count, it.wakelock_duration_ms};
74       callback_logs.push_back(entry);
75     }
76     do_in_jni_thread(
77         FROM_HERE,
78         base::Bind(&ActivityAttributionCallbacks::OnActivityLogsReady,
79                    base::Unretained(callbacks), callback_logs));
80   }
81 
82  private:
83   // Private constructor to prevent construction.
ActivityAttributionInterfaceImpl()84   ActivityAttributionInterfaceImpl() {}
85 
86   ActivityAttributionCallbacks* callbacks;
87 };
88 
89 ActivityAttributionInterface*
get_activity_attribution_instance()90 bluetooth::shim::get_activity_attribution_instance() {
91   return ActivityAttributionInterfaceImpl::GetInstance();
92 }
93 
init_activity_attribution()94 void bluetooth::shim::init_activity_attribution() {
95   bluetooth::shim::get_activity_attribution_instance()->Init();
96 }
97