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 "inputmethod_extension_context.h"
17
18 #include "ability_connection.h"
19 #include "ability_manager_client.h"
20 #include "global.h"
21
22 namespace OHOS {
23 namespace AbilityRuntime {
24 const size_t InputMethodExtensionContext::CONTEXT_TYPE_ID(std::hash<const char *>{}("InputMethodExtensionContext"));
25 int InputMethodExtensionContext::ILLEGAL_REQUEST_CODE(-1);
26
StartAbility(const AAFwk::Want & want) const27 ErrCode InputMethodExtensionContext::StartAbility(const AAFwk::Want &want) const
28 {
29 IMSA_HILOGD("%{public}s begin.", __func__);
30 auto client = AAFwk::AbilityManagerClient::GetInstance();
31 if (client == nullptr) {
32 IMSA_HILOGE("client is nullptr.");
33 return ERR_NO_INIT;
34 }
35 ErrCode err = client->StartAbility(want, token_, ILLEGAL_REQUEST_CODE);
36 IMSA_HILOGD("%{public}s ret=%{public}d", __func__, err);
37 if (err != ERR_OK) {
38 IMSA_HILOGE("InputMethodExtensionContext::StartAbility failed: %{public}d", err);
39 }
40 return err;
41 }
42
StartAbility(const AAFwk::Want & want,const AAFwk::StartOptions & startOptions) const43 ErrCode InputMethodExtensionContext::StartAbility(const AAFwk::Want &want,
44 const AAFwk::StartOptions &startOptions) const
45 {
46 IMSA_HILOGD("%{public}s start.", __func__);
47 auto client = AAFwk::AbilityManagerClient::GetInstance();
48 if (client == nullptr) {
49 IMSA_HILOGE("client is nullptr.");
50 return ERR_NO_INIT;
51 }
52 ErrCode err = client->StartAbility(want, startOptions, token_, ILLEGAL_REQUEST_CODE);
53 IMSA_HILOGD("%{public}s ret: %{public}d.", __func__, err);
54 if (err != ERR_OK) {
55 IMSA_HILOGE("InputMethodExtensionContext::StartAbility failed: %{public}d", err);
56 }
57 return err;
58 }
59
ConnectAbility(const AAFwk::Want & want,const sptr<AbilityConnectCallback> & connectCallback) const60 bool InputMethodExtensionContext::ConnectAbility(const AAFwk::Want &want,
61 const sptr<AbilityConnectCallback> &connectCallback) const
62 {
63 IMSA_HILOGI("%{public}s start.", __func__);
64 ErrCode ret = ConnectionManager::GetInstance().ConnectAbility(token_, want, connectCallback);
65 IMSA_HILOGI("InputMethodExtensionContext::ConnectAbility ret: %{public}d", ret);
66 return ret == ERR_OK;
67 }
68
StartAbilityWithAccount(const AAFwk::Want & want,int accountId) const69 ErrCode InputMethodExtensionContext::StartAbilityWithAccount(const AAFwk::Want &want, int accountId) const
70 {
71 IMSA_HILOGI("%{public}s start, accountId: %{public}d.", __func__, accountId);
72 auto client = AAFwk::AbilityManagerClient::GetInstance();
73 if (client == nullptr) {
74 IMSA_HILOGE("client is nullptr.");
75 return ERR_NO_INIT;
76 }
77 ErrCode err = client->StartAbility(want, token_, ILLEGAL_REQUEST_CODE, accountId);
78 IMSA_HILOGD("%{public}s ret: %{public}d.", __func__, err);
79 if (err != ERR_OK) {
80 IMSA_HILOGE("InputMethodExtensionContext::StartAbilityWithAccount failed: %{public}d!", err);
81 }
82 return err;
83 }
84
StartAbilityWithAccount(const AAFwk::Want & want,int accountId,const AAFwk::StartOptions & startOptions) const85 ErrCode InputMethodExtensionContext::StartAbilityWithAccount(const AAFwk::Want &want, int accountId,
86 const AAFwk::StartOptions &startOptions) const
87 {
88 IMSA_HILOGD("%{public}s start.", __func__);
89 auto client = AAFwk::AbilityManagerClient::GetInstance();
90 if (client == nullptr) {
91 IMSA_HILOGE("client is nullptr.");
92 return ERR_NO_INIT;
93 }
94 ErrCode err = client->StartAbility(want, startOptions, token_,
95 ILLEGAL_REQUEST_CODE, accountId);
96 IMSA_HILOGD("%{public}s ret: %{public}d", __func__, err);
97 if (err != ERR_OK) {
98 IMSA_HILOGE("InputMethodContext::StartAbilityWithAccount is failed %{public}d!", err);
99 }
100 return err;
101 }
102
ConnectAbilityWithAccount(const AAFwk::Want & want,int accountId,const sptr<AbilityConnectCallback> & connectCallback) const103 bool InputMethodExtensionContext::ConnectAbilityWithAccount(const AAFwk::Want &want, int accountId,
104 const sptr<AbilityConnectCallback> &connectCallback) const
105 {
106 IMSA_HILOGI("%{public}s start.", __func__);
107 ErrCode ret = ConnectionManager::GetInstance().ConnectAbilityWithAccount(token_, want, accountId, connectCallback);
108 IMSA_HILOGI("InputMethodExtensionContext::ConnectAbilityWithAccount ret: %{public}d.", ret);
109 return ret == ERR_OK;
110 }
111
DisconnectAbility(const AAFwk::Want & want,const sptr<AbilityConnectCallback> & connectCallback) const112 ErrCode InputMethodExtensionContext::DisconnectAbility(const AAFwk::Want &want,
113 const sptr<AbilityConnectCallback> &connectCallback) const
114 {
115 IMSA_HILOGI("%{public}s start.", __func__);
116 ErrCode ret = ConnectionManager::GetInstance().DisconnectAbility(token_, want.GetElement(), connectCallback);
117 if (ret != ERR_OK) {
118 IMSA_HILOGE("%{public}s end DisconnectAbility error, ret: %{public}d!", __func__, ret);
119 }
120 IMSA_HILOGI("%{public}s end DisconnectAbility.", __func__);
121 return ret;
122 }
123
TerminateAbility()124 ErrCode InputMethodExtensionContext::TerminateAbility()
125 {
126 IMSA_HILOGI("%{public}s start.", __func__);
127 auto client = AAFwk::AbilityManagerClient::GetInstance();
128 if (client == nullptr) {
129 IMSA_HILOGE("client is nullptr.");
130 return ERR_NO_INIT;
131 }
132 ErrCode err = client->TerminateAbility(token_, -1, nullptr);
133 if (err != ERR_OK) {
134 IMSA_HILOGE("InputMethodExtensionContext::TerminateAbility failed: %{public}d!", err);
135 }
136 IMSA_HILOGI("%{public}s end.", __func__);
137 return err;
138 }
139
GetAbilityInfoType() const140 AppExecFwk::AbilityType InputMethodExtensionContext::GetAbilityInfoType() const
141 {
142 std::shared_ptr<AppExecFwk::AbilityInfo> info = GetAbilityInfo();
143 if (info == nullptr) {
144 IMSA_HILOGE("info is nullptr!");
145 return AppExecFwk::AbilityType::UNKNOWN;
146 }
147 return info->type;
148 }
149 } // namespace AbilityRuntime
150 } // namespace OHOS