1/*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#include "distributed_ability_manager_client.h"
16
17#include "base/continuationmgr_log.h"
18#include "distributed_ability_manager_proxy.h"
19#include "if_system_ability_manager.h"
20#include "ipc_skeleton.h"
21#include "iservice_registry.h"
22#include "system_ability_definition.h"
23
24namespace OHOS {
25namespace DistributedSchedule {
26namespace {
27const std::string TAG = "ContinuationManagerClient";
28}
29
30IMPLEMENT_SINGLE_INSTANCE(DistributedAbilityManagerClient);
31
32sptr<IDistributedAbilityManager> DistributedAbilityManagerClient::GetContinuationMgrService()
33{
34    auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
35    if (samgrProxy == nullptr) {
36        HILOGE("get samgr failed.");
37        return nullptr;
38    }
39    sptr<IRemoteObject> remoteObj = samgrProxy->GetSystemAbility(CONTINUATION_MANAGER_SA_ID);
40    if (remoteObj == nullptr) {
41        HILOGE("get continuationMgrService SA failed.");
42        return nullptr;
43    }
44    return iface_cast<IDistributedAbilityManager>(remoteObj);
45}
46
47int32_t DistributedAbilityManagerClient::Register(
48    const std::shared_ptr<ContinuationExtraParams>& continuationExtraParams, int32_t& token)
49{
50    HILOGD("called.");
51    sptr<IDistributedAbilityManager> continuationMgrProxy = GetContinuationMgrService();
52    if (continuationMgrProxy == nullptr) {
53        HILOGE("continuationMgrProxy is nullptr");
54        return ERR_NULL_OBJECT;
55    }
56    return continuationMgrProxy->Register(continuationExtraParams, token);
57}
58
59int32_t DistributedAbilityManagerClient::Unregister(int32_t token)
60{
61    HILOGD("called.");
62    sptr<IDistributedAbilityManager> continuationMgrProxy = GetContinuationMgrService();
63    if (continuationMgrProxy == nullptr) {
64        HILOGE("continuationMgrProxy is nullptr");
65        return ERR_NULL_OBJECT;
66    }
67    return continuationMgrProxy->Unregister(token);
68}
69
70int32_t DistributedAbilityManagerClient::RegisterDeviceSelectionCallback(int32_t token, const std::string& cbType,
71    const sptr<DeviceSelectionNotifierStub>& notifier)
72{
73    HILOGD("called.");
74    sptr<IDistributedAbilityManager> continuationMgrProxy = GetContinuationMgrService();
75    if (continuationMgrProxy == nullptr) {
76        HILOGE("continuationMgrProxy is nullptr");
77        return ERR_NULL_OBJECT;
78    }
79    return continuationMgrProxy->RegisterDeviceSelectionCallback(token, cbType, notifier);
80}
81
82int32_t DistributedAbilityManagerClient::UnregisterDeviceSelectionCallback(int32_t token, const std::string& cbType)
83{
84    HILOGD("called.");
85    sptr<IDistributedAbilityManager> continuationMgrProxy = GetContinuationMgrService();
86    if (continuationMgrProxy == nullptr) {
87        HILOGE("continuationMgrProxy is nullptr");
88        return ERR_NULL_OBJECT;
89    }
90    return continuationMgrProxy->UnregisterDeviceSelectionCallback(token, cbType);
91}
92
93int32_t DistributedAbilityManagerClient::UpdateConnectStatus(int32_t token, const std::string& deviceId,
94    const DeviceConnectStatus& deviceConnectStatus)
95{
96    HILOGD("called.");
97    sptr<IDistributedAbilityManager> continuationMgrProxy = GetContinuationMgrService();
98    if (continuationMgrProxy == nullptr) {
99        HILOGE("continuationMgrProxy is nullptr");
100        return ERR_NULL_OBJECT;
101    }
102    return continuationMgrProxy->UpdateConnectStatus(token, deviceId, deviceConnectStatus);
103}
104
105int32_t DistributedAbilityManagerClient::StartDeviceManager(
106    int32_t token, const std::shared_ptr<ContinuationExtraParams>& continuationExtraParams)
107{
108    HILOGD("called.");
109    sptr<IDistributedAbilityManager> continuationMgrProxy = GetContinuationMgrService();
110    if (continuationMgrProxy == nullptr) {
111        HILOGE("continuationMgrProxy is nullptr");
112        return ERR_NULL_OBJECT;
113    }
114    return continuationMgrProxy->StartDeviceManager(token, continuationExtraParams);
115}
116}  // namespace DistributedSchedule
117}  // namespace OHOS