diff --git a/frameworks/innerkits/file_access/include/file_access_helper.h b/frameworks/innerkits/file_access/include/file_access_helper.h index df00dea5705432e9bbaba4cfce3ce1a8490b4160..a3a576292f8e9f049e0e03afad11a43f1b9b9bd0 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 ad9ac2937563fc42d8d1ad252f9316c31b3307e0..f27bf13800d7f6d284212678dfb7d920cfa74772 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 915c58aab85aa498d5fb97e853d534f85f7edbc8..a1d52267f1dc34d73e5a192959693e1bf0e77827 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;