1 /*
2 * Copyright (c) 2022 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
16 #include "enterprise_admin_connection.h"
17
18 #include "admin_manager.h"
19 #include "edm_constants.h"
20 #include "edm_log.h"
21 #include "edm_os_account_manager_impl.h"
22 #include "enterprise_conn_manager.h"
23
24 namespace OHOS {
25 namespace EDM {
~EnterpriseAdminConnection()26 EnterpriseAdminConnection::~EnterpriseAdminConnection() {}
27
SetIsOnAdminEnabled(bool isOnAdminEnabled)28 void EnterpriseAdminConnection::SetIsOnAdminEnabled(bool isOnAdminEnabled)
29 {
30 isOnAdminEnabled_ = isOnAdminEnabled;
31 }
32
OnAbilityConnectDone(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject,int32_t resultCode)33 void EnterpriseAdminConnection::OnAbilityConnectDone(
34 const AppExecFwk::ElementName& element, const sptr<IRemoteObject>& remoteObject, int32_t resultCode)
35 {
36 EDMLOGI("EnterpriseAdminConnection OnAbilityConnectDone");
37 proxy_ = (new (std::nothrow) EnterpriseAdminProxy(remoteObject));
38 if (!proxy_) {
39 EDMLOGE("EnterpriseAdminConnection get enterpriseAdminProxy failed.");
40 return;
41 }
42 switch (code_) {
43 case IEnterpriseAdmin::COMMAND_ON_ADMIN_ENABLED:
44 if (isOnAdminEnabled_) {
45 proxy_->OnAdminEnabled();
46 }
47 break;
48 case IEnterpriseAdmin::COMMAND_ON_ADMIN_DISABLED:
49 proxy_->OnAdminDisabled();
50 break;
51 default:
52 return;
53 }
54 EDMLOGI("EnterpriseAdminConnection OnAbilityConnectDone over");
55 }
56
OnAbilityDisconnectDone(const AppExecFwk::ElementName & element,int32_t resultCode)57 void EnterpriseAdminConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName& element, int32_t resultCode)
58 {
59 EDMLOGI("EnterpriseAdminConnection OnAbilityDisconnectDone");
60 if (AdminManager::GetInstance()->IsSuperAdmin(want_.GetElement().GetBundleName())) {
61 int32_t userId = EdmConstants::DEFAULT_USER_ID;
62 auto superAdmin = AdminManager::GetInstance()->GetSuperAdmin();
63 if (superAdmin && superAdmin->adminInfo_.runningMode_ == RunningMode::MULTI_USER) {
64 userId = GetCurrentUserId();
65 }
66 std::shared_ptr<EnterpriseConnManager> manager = DelayedSingleton<EnterpriseConnManager>::GetInstance();
67 bool ret = manager->CreateAdminConnection(want_, IEnterpriseAdmin::COMMAND_ON_ADMIN_ENABLED, userId, false);
68 if (!ret) {
69 EDMLOGW("EnterpriseAdminConnection::OnAbilityDisconnectDone CreateAdminConnection failed.");
70 }
71 }
72 }
73
GetCurrentUserId()74 int32_t EnterpriseAdminConnection::GetCurrentUserId()
75 {
76 std::vector<int32_t> ids;
77 ErrCode ret = std::make_shared<EdmOsAccountManagerImpl>()->QueryActiveOsAccountIds(ids);
78 if (FAILED(ret) || ids.empty()) {
79 EDMLOGE("EnterpriseAdminConnection GetCurrentUserId failed");
80 return -1;
81 }
82 EDMLOGD("EnterpriseAdminConnection GetCurrentUserId");
83 return (ids.at(0));
84 }
85 } // namespace EDM
86 } // namespace OHOS
87