diff --git a/bundle.json b/bundle.json index 0acc74b97..dafbbfc79 100644 --- a/bundle.json +++ b/bundle.json @@ -81,7 +81,8 @@ "//base/account/os_account/frameworks/domain_account:domain_account_innerkits", "//base/account/os_account/frameworks/ohosaccount/native:libaccountkits", "//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", - "//base/account/os_account/frameworks/appaccount/cj:cj_appAccount_ffi" + "//base/account/os_account/frameworks/appaccount/cj:cj_appAccount_ffi", + "//base/account/os_account/frameworks/cj/distributed_account:cj_distributed_account_ffi" ], "service_group": [ "//base/account/os_account/services:services_target", diff --git a/frameworks/cj/distributed_account/BUILD.gn b/frameworks/cj/distributed_account/BUILD.gn new file mode 100644 index 000000000..4996e6ca0 --- /dev/null +++ b/frameworks/cj/distributed_account/BUILD.gn @@ -0,0 +1,52 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("../../../os_account.gni") + +ohos_shared_library("cj_distributed_account_ffi") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + + include_dirs = [ + "${os_account_path}/frameworks/cj/distributed_account/include", + "${os_account_path}/interfaces/innerkits/appaccount/native/include", + ] + + sources = [ "./src/cj_distributed_account.cpp" ] + + deps = [ + "${common_path}:libaccount_common", + "${innerkits_native_path}:libaccountkits", + ] + + external_deps = [ + "ability_base:want", + "ability_runtime:ability_connect_callback_stub", + "ability_runtime:ability_manager", + "ability_runtime:abilitykit_native", + "c_utils:utils", + "common_event_service:cesfwk_innerkits", + "hilog:libhilog", + "ipc:ipc_single", + "napi:cj_bind_ffi", + "napi:cj_bind_native", + ] + + innerapi_tags = [ "platformsdk" ] + subsystem_name = "account" + part_name = "os_account" +} diff --git a/frameworks/cj/distributed_account/include/cj_distributed_account.h b/frameworks/cj/distributed_account/include/cj_distributed_account.h new file mode 100644 index 000000000..f8d45994b --- /dev/null +++ b/frameworks/cj/distributed_account/include/cj_distributed_account.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CJ_DISTRIBUTED_ACCOUNT_FFI_H +#define CJ_DISTRIBUTED_ACCOUNT_FFI_H + +#include "ffi_remote_data.h" + +namespace OHOS { +namespace AccountSA { +struct RetDistributedInfo { + char *name; + char *id; + char *event; + char *nickname; + char *avatar; + int32_t status; +}; + +extern "C" +{ +FFI_EXPORT RetDistributedInfo FfiOHOSDistributedAccountDistributedInfoGetOsAccountDistributedInfo(int32_t *errCode); + +FFI_EXPORT void FfiOHOSDistributedAccountUnitSetOsAccountDistributedInfo(RetDistributedInfo retInfo, int32_t *errCode); +} +} // namespace AccountSA +} // namespace OHOS + +#endif diff --git a/frameworks/cj/distributed_account/src/cj_distributed_account.cpp b/frameworks/cj/distributed_account/src/cj_distributed_account.cpp new file mode 100644 index 000000000..56a38f656 --- /dev/null +++ b/frameworks/cj/distributed_account/src/cj_distributed_account.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cj_distributed_account.h" +#include "ohos_account_kits.h" + +namespace OHOS { +namespace AccountSA { +char *convertStrToChar(std::string str) +{ + static char *res = const_cast(str.c_str()); + return res; +} + +RetDistributedInfo convertToRet(AccountSA::OhosAccountInfo ohosInfo) +{ + RetDistributedInfo retInfo{0}; + retInfo.name = convertStrToChar(ohosInfo.name_); + retInfo.id = convertStrToChar(ohosInfo.uid_); + retInfo.nickname = convertStrToChar(ohosInfo.nickname_); + retInfo.avatar = convertStrToChar(ohosInfo.avatar_); + retInfo.status = ohosInfo.status_; + return retInfo; +} + +AccountSA::OhosAccountInfo getOhosInfoFromRet(RetDistributedInfo retInfo) +{ + AccountSA::OhosAccountInfo ohosInfo; + OhosAccountKits::GetInstance().GetOhosAccountInfo(ohosInfo); + ohosInfo.name_ = retInfo.name; + ohosInfo.uid_ = retInfo.id; + ohosInfo.nickname_ = retInfo.nickname; + ohosInfo.avatar_ = retInfo.avatar; + ohosInfo.status_ = retInfo.status; + return ohosInfo; +} + +extern "C" +{ + RetDistributedInfo FfiOHOSDistributedAccountDistributedInfoGetOsAccountDistributedInfo(int32_t *errCode) + { + AccountSA::OhosAccountInfo ohosAccountInfo; + if (errCode == nullptr) { + return convertToRet(ohosAccountInfo); + } + *errCode = OhosAccountKits::GetInstance().GetOhosAccountInfo(ohosAccountInfo); + return convertToRet(ohosAccountInfo); + } + + void FfiOHOSDistributedAccountUnitSetOsAccountDistributedInfo(RetDistributedInfo retInfo, int32_t *errCode) + { + AccountSA::OhosAccountInfo ohosAccountInfo = getOhosInfoFromRet(retInfo); + if (errCode == nullptr) { + return; + } + *errCode = OhosAccountKits::GetInstance().SetOhosAccountInfo(ohosAccountInfo, retInfo.event); + } +} +} // namespace AccountSA +} // namespace OHOS \ No newline at end of file