From 097368ae3db75b6f63bb0cc813310e64f930ad21 Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Fri, 17 Jun 2022 09:29:29 +0800 Subject: [PATCH] add FAF client Signed-off-by: wangjianqiang --- .../file_access/include/file_access_helper.h | 8 + .../file_access/src/file_access_helper.cpp | 140 ++++++++++++++++++ .../file_access/src/file_ext_connection.cpp | 2 + 3 files changed, 150 insertions(+) diff --git a/frameworks/innerkits/file_access/include/file_access_helper.h b/frameworks/innerkits/file_access/include/file_access_helper.h index df00dea5..a3a57629 100644 --- a/frameworks/innerkits/file_access/include/file_access_helper.h +++ b/frameworks/innerkits/file_access/include/file_access_helper.h @@ -23,9 +23,11 @@ #include "file_ext_connection.h" #include "foundation/ability/ability_runtime/frameworks/kits/appkit/native/ability_runtime/context/context.h" #include "ifile_ext_base.h" +#include "uri.h" #include "want.h" #include "hilog_wrapper.h" +using Uri = OHOS::Uri; namespace OHOS { namespace FileAccessFwk { @@ -37,6 +39,11 @@ public: static std::shared_ptr Creator(const std::shared_ptr &context, const AAFwk::Want &want); + int OpenFile(Uri &uri, int flags); + int CreateFile(Uri &parentUri, const std::string &displayName, Uri &newFileUri); + int Mkdir(Uri &parentUri, const std::string &displayName, Uri &newDirUri); + int Delete(Uri &selectFileUri); + int Rename(Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri); private: FileAccessHelper(const std::shared_ptr &context, const AAFwk::Want &want, const sptr &fileExtProxy); @@ -46,6 +53,7 @@ private: sptr token_ = {}; AAFwk::Want want_ = {}; sptr fileExtProxy_ = nullptr; + bool isSystemCaller_ = false; sptr callerDeathRecipient_ = nullptr; sptr fileExtConnection_ = nullptr; }; diff --git a/frameworks/innerkits/file_access/src/file_access_helper.cpp b/frameworks/innerkits/file_access/src/file_access_helper.cpp index ad9ac293..f27bf138 100644 --- a/frameworks/innerkits/file_access/src/file_access_helper.cpp +++ b/frameworks/innerkits/file_access/src/file_access_helper.cpp @@ -90,6 +90,146 @@ std::shared_ptr FileAccessHelper::Creator( return std::shared_ptr(ptrFileAccessHelper); } +int FileAccessHelper::OpenFile(Uri &uri, int flags) +{ + HILOG_INFO("%{public}s begin.", __func__); + + int fd = -1; + + HILOG_INFO("FileAccessHelper::OpenFile before ConnectFileExtAbility."); + if (!fileExtConnection_->IsExtAbilityConnected()) { + fileExtConnection_->ConnectFileExtAbility(want_, token_); + } + fileExtProxy_ = fileExtConnection_->GetFileExtProxy(); + HILOG_INFO("FileAccessHelper::OpenFile after ConnectFileExtAbility."); + if (isSystemCaller_ && fileExtProxy_) { + AddFileAccessDeathRecipient(fileExtProxy_->AsObject()); + } + + if (fileExtProxy_ == nullptr) { + HILOG_ERROR("%{public}s failed with invalid fileExtProxy_", __func__); + return fd; + } + + HILOG_INFO("FileAccessHelper::OpenFile before fileExtProxy_->OpenFile."); + fd = fileExtProxy_->OpenFile(uri, flags); + HILOG_INFO("FileAccessHelper::OpenFile after fileExtProxy_->OpenFile."); + HILOG_INFO("%{public}s end.", __func__); + return fd; +} + +int FileAccessHelper::CreateFile(Uri &parentUri, const std::string &displayName, Uri &newFileUri) +{ + HILOG_INFO("%{public}s begin.", __func__); + + int index = -1; + + HILOG_INFO("FileAccessHelper::CreateFile before ConnectDataShareExtAbility."); + if (!fileExtConnection_->IsExtAbilityConnected()) { + fileExtConnection_->ConnectFileExtAbility(want_, token_); + } + fileExtProxy_ = fileExtConnection_->GetFileExtProxy(); + HILOG_INFO("FileAccessHelper::CreateFile after ConnectDataShareExtAbility."); + if (isSystemCaller_ && fileExtProxy_) { + AddFileAccessDeathRecipient(fileExtProxy_->AsObject()); + } + + if (fileExtProxy_ == nullptr) { + HILOG_ERROR("%{public}s failed with invalid fileExtProxy_", __func__); + return index; + } + + HILOG_INFO("FileAccessHelper::CreateFile before fileExtProxy_->CreateFile."); + index = fileExtProxy_->CreateFile(parentUri, displayName, newFileUri); + HILOG_INFO("FileAccessHelper::CreateFile after fileExtProxy_->CreateFile."); + HILOG_INFO("%{public}s end.", __func__); + return index; +} + +int FileAccessHelper::Mkdir(Uri &parentUri, const std::string &displayName, Uri &newDirUri) +{ + HILOG_INFO("%{public}s begin.", __func__); + + int index = -1; + + HILOG_INFO("FileAccessHelper::Mkdir before ConnectFileExtAbility."); + if (!fileExtConnection_->IsExtAbilityConnected()) { + fileExtConnection_->ConnectFileExtAbility(want_, token_); + } + fileExtProxy_ = fileExtConnection_->GetFileExtProxy(); + HILOG_INFO("FileAccessHelper::Mkdir after ConnectFileExtAbility."); + if (isSystemCaller_ && fileExtProxy_) { + AddFileAccessDeathRecipient(fileExtProxy_->AsObject()); + } + + if (fileExtProxy_ == nullptr) { + HILOG_ERROR("%{public}s failed with invalid fileExtProxy_", __func__); + return index; + } + + HILOG_INFO("FileAccessHelper::Mkdir before fileExtProxy_->Mkdir."); + index = fileExtProxy_->Mkdir(parentUri, displayName, newDirUri); + HILOG_INFO("FileAccessHelper::Mkdir after fileExtProxy_->Mkdir."); + HILOG_INFO("%{public}s end.", __func__); + return index; +} + +int FileAccessHelper::Delete(Uri &selectFileUri) +{ + HILOG_INFO("%{public}s begin.", __func__); + + int index = -1; + + HILOG_INFO("FileAccessHelper::Delete before ConnectFileExtAbility."); + if (!fileExtConnection_->IsExtAbilityConnected()) { + fileExtConnection_->ConnectFileExtAbility(want_, token_); + } + fileExtProxy_ = fileExtConnection_->GetFileExtProxy(); + HILOG_INFO("FileAccessHelper::Delete after ConnectFileExtAbility."); + if (isSystemCaller_ && fileExtProxy_) { + AddFileAccessDeathRecipient(fileExtProxy_->AsObject()); + } + + if (fileExtProxy_ == nullptr) { + HILOG_ERROR("%{public}s failed with invalid fileExtProxy_", __func__); + return index; + } + + HILOG_INFO("FileAccessHelper::Delete before fileExtProxy_->Delete."); + index = fileExtProxy_->Delete(selectFileUri); + HILOG_INFO("FileAccessHelper::Delete after fileExtProxy_->Delete."); + HILOG_INFO("%{public}s end.", __func__); + return index; +} + +int FileAccessHelper::Rename(Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) +{ + HILOG_INFO("%{public}s begin.", __func__); + + int index = -1; + + HILOG_INFO("FileAccessHelper::Rename before ConnectFileExtAbility."); + if (!fileExtConnection_->IsExtAbilityConnected()) { + fileExtConnection_->ConnectFileExtAbility(want_, token_); + } + fileExtProxy_ = fileExtConnection_->GetFileExtProxy(); + HILOG_INFO("FileAccessHelper::Rename after ConnectFileExtAbility."); + if (isSystemCaller_ && fileExtProxy_) { + AddFileAccessDeathRecipient(fileExtProxy_->AsObject()); + } + + if (fileExtProxy_ == nullptr) { + HILOG_ERROR("%{public}s failed with invalid fileExtProxy_", __func__); + return index; + } + + HILOG_INFO("FileAccessHelper::Rename before fileExtProxy_->Rename."); + index = fileExtProxy_->Rename(sourceFileUri, displayName, newFileUri); + HILOG_INFO("FileAccessHelper::Rename after fileExtProxy_->Rename."); + HILOG_INFO("%{public}s end.", __func__); + return index; +} + void FileAccessDeathRecipient::OnRemoteDied(const wptr &remote) { HILOG_INFO("%{public}s begin.", __func__); diff --git a/frameworks/innerkits/file_access/src/file_ext_connection.cpp b/frameworks/innerkits/file_access/src/file_ext_connection.cpp index 915c58aa..a1d52267 100644 --- a/frameworks/innerkits/file_access/src/file_ext_connection.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_connection.cpp @@ -17,6 +17,7 @@ #include "ability_manager_client.h" #include "hilog_wrapper.h" +#include "file_ext_proxy.h" namespace OHOS { namespace FileAccessFwk { @@ -44,6 +45,7 @@ void FileExtConnection::OnAbilityConnectDone( HILOG_ERROR("%{public}s failed, remote is nullptr", __func__); return; } + fileExtProxy_ = iface_cast(remoteObject); if (fileExtProxy_ == nullptr) { HILOG_ERROR("%{public}s failed, fileExtProxy_ is nullptr", __func__); return; -- Gitee