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(
25 std::hash<const char *> {}("InputMethodExtensionContext"));
26 int InputMethodExtensionContext::ILLEGAL_REQUEST_CODE(-1);
27
StartAbility(const AAFwk::Want & want) const28 ErrCode InputMethodExtensionContext::StartAbility(const AAFwk::Want &want) const
29 {
30 IMSA_HILOGD("%{public}s begin.", __func__);
31 ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, token_, ILLEGAL_REQUEST_CODE);
32 IMSA_HILOGD("%{public}s ret=%{public}d", __func__, err);
33 if (err != ERR_OK) {
34 IMSA_HILOGE("InputMethodExtensionContext::StartAbility failed: %{public}d", err);
35 }
36 return err;
37 }
38
StartAbility(const AAFwk::Want & want,const AAFwk::StartOptions & startOptions) const39 ErrCode InputMethodExtensionContext::StartAbility(
40 const AAFwk::Want &want, const AAFwk::StartOptions &startOptions) const
41 {
42 IMSA_HILOGD("%{public}s begin.", __func__);
43 ErrCode err =
44 AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, startOptions, token_, ILLEGAL_REQUEST_CODE);
45 IMSA_HILOGD("%{public}s ret=%{public}d", __func__, err);
46 if (err != ERR_OK) {
47 IMSA_HILOGE("InputMethodExtensionContext::StartAbility failed: %{public}d", err);
48 }
49 return err;
50 }
51
ConnectAbility(const AAFwk::Want & want,const sptr<AbilityConnectCallback> & connectCallback) const52 bool InputMethodExtensionContext::ConnectAbility(
53 const AAFwk::Want &want, const sptr<AbilityConnectCallback> &connectCallback) const
54 {
55 IMSA_HILOGI("%{public}s begin.", __func__);
56 ErrCode ret = ConnectionManager::GetInstance().ConnectAbility(token_, want, connectCallback);
57 IMSA_HILOGI("InputMethodExtensionContext::ConnectAbility ret = %{public}d", ret);
58 return ret == ERR_OK;
59 }
60
StartAbilityWithAccount(const AAFwk::Want & want,int accountId) const61 ErrCode InputMethodExtensionContext::StartAbilityWithAccount(const AAFwk::Want &want, int accountId) const
62 {
63 IMSA_HILOGI("%{public}s begin, accountId: %{public}d", __func__, accountId);
64 ErrCode err =
65 AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, token_, ILLEGAL_REQUEST_CODE, accountId);
66 IMSA_HILOGD("%{public}s ret=%{public}d", __func__, err);
67 if (err != ERR_OK) {
68 IMSA_HILOGE("InputMethodExtensionContext::StartAbilityWithAccount failed: %{public}d", err);
69 }
70 return err;
71 }
72
StartAbilityWithAccount(const AAFwk::Want & want,int accountId,const AAFwk::StartOptions & startOptions) const73 ErrCode InputMethodExtensionContext::StartAbilityWithAccount(
74 const AAFwk::Want &want, int accountId, const AAFwk::StartOptions &startOptions) const
75 {
76 IMSA_HILOGD("%{public}s begin.", __func__);
77 ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(
78 want, startOptions, token_, ILLEGAL_REQUEST_CODE, accountId);
79 IMSA_HILOGD("%{public}s ret=%{public}d", __func__, err);
80 if (err != ERR_OK) {
81 IMSA_HILOGE("InputMethodContext::StartAbilityWithAccount is failed %{public}d", err);
82 }
83 return err;
84 }
85
ConnectAbilityWithAccount(const AAFwk::Want & want,int accountId,const sptr<AbilityConnectCallback> & connectCallback) const86 bool InputMethodExtensionContext::ConnectAbilityWithAccount(
87 const AAFwk::Want &want, int accountId, const sptr<AbilityConnectCallback> &connectCallback) const
88 {
89 IMSA_HILOGI("%{public}s begin.", __func__);
90 ErrCode ret = ConnectionManager::GetInstance().ConnectAbilityWithAccount(token_, want, accountId, connectCallback);
91 IMSA_HILOGI("InputMethodExtensionContext::ConnectAbilityWithAccount ret = %{public}d", ret);
92 return ret == ERR_OK;
93 }
94
DisconnectAbility(const AAFwk::Want & want,const sptr<AbilityConnectCallback> & connectCallback) const95 ErrCode InputMethodExtensionContext::DisconnectAbility(
96 const AAFwk::Want &want, const sptr<AbilityConnectCallback> &connectCallback) const
97 {
98 IMSA_HILOGI("%{public}s begin.", __func__);
99 ErrCode ret = ConnectionManager::GetInstance().DisconnectAbility(token_, want.GetElement(), connectCallback);
100 if (ret != ERR_OK) {
101 IMSA_HILOGE("%{public}s end DisconnectAbility error, ret=%{public}d", __func__, ret);
102 }
103 IMSA_HILOGI("%{public}s end DisconnectAbility", __func__);
104 return ret;
105 }
106
TerminateAbility()107 ErrCode InputMethodExtensionContext::TerminateAbility()
108 {
109 IMSA_HILOGI("%{public}s begin.", __func__);
110 ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->TerminateAbility(token_, -1, nullptr);
111 if (err != ERR_OK) {
112 IMSA_HILOGE("InputMethodExtensionContext::TerminateAbility failed: %{public}d", err);
113 }
114 IMSA_HILOGI("%{public}s end.", __func__);
115 return err;
116 }
117
GetAbilityInfoType() const118 AppExecFwk::AbilityType InputMethodExtensionContext::GetAbilityInfoType() const
119 {
120 std::shared_ptr<AppExecFwk::AbilityInfo> info = GetAbilityInfo();
121 if (info == nullptr) {
122 IMSA_HILOGE("InputMethodContext::GetAbilityInfoType info == nullptr");
123 return AppExecFwk::AbilityType::UNKNOWN;
124 }
125 return info->type;
126 }
127 } // namespace AbilityRuntime
128 } // namespace OHOS