[cj]: distributed_account cangjie ffi层

Change-Id: Ie46d88b639d67b21e30b43b9a4e1ee0f9ec4bbb7
Signed-off-by: l30009422 <liangjun24@huawei.com>
This commit is contained in:
l30009422 2024-10-15 21:01:40 +08:00
parent 1ab811b3ed
commit c1cdb920a4
4 changed files with 167 additions and 1 deletions

View File

@ -81,7 +81,8 @@
"//base/account/os_account/frameworks/domain_account:domain_account_innerkits", "//base/account/os_account/frameworks/domain_account:domain_account_innerkits",
"//base/account/os_account/frameworks/ohosaccount/native:libaccountkits", "//base/account/os_account/frameworks/ohosaccount/native:libaccountkits",
"//base/account/os_account/frameworks/osaccount/native:os_account_innerkits", "//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": [ "service_group": [
"//base/account/os_account/services:services_target", "//base/account/os_account/services:services_target",

View File

@ -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"
}

View File

@ -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

View File

@ -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<char *>(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