1 /* 2 * Copyright (c) 2023 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 #ifndef DATASHARESERVICE_DATA_SERVICE_IMPL_H 17 #define DATASHARESERVICE_DATA_SERVICE_IMPL_H 18 19 #include <cstdint> 20 #include <functional> 21 #include <string> 22 23 #include "bundle_mgr_proxy.h" 24 #include "common_event_subscribe_info.h" 25 #include "common_event_subscriber.h" 26 #include "changeevent/remote_change_event.h" 27 #include "data_proxy_observer.h" 28 #include "data_provider_config.h" 29 #include "data_share_db_config.h" 30 #include "data_share_service_stub.h" 31 #include "data_share_silent_config.h" 32 #include "datashare_template.h" 33 #include "db_delegate.h" 34 #include "eventcenter/event.h" 35 #include "feature/static_acts.h" 36 #include "get_data_strategy.h" 37 #include "publish_strategy.h" 38 #include "rdb_notify_strategy.h" 39 #include "subscribe_strategy.h" 40 #include "template_strategy.h" 41 #include "uri_utils.h" 42 #include "visibility.h" 43 44 namespace OHOS::DataShare { 45 class DataShareServiceImpl : public DataShareServiceStub { 46 public: 47 using Handler = std::function<void(int, std::map<std::string, std::vector<std::string>> &)>; 48 using ExecuteCallback = std::function<int32_t(DataProviderConfig::ProviderInfo &, 49 DistributedData::StoreMetaData &, std::shared_ptr<DBDelegate>)>; 50 using ExecuteCallbackEx = std::function<std::pair<int32_t, int32_t>(DataProviderConfig::ProviderInfo &, 51 DistributedData::StoreMetaData &, std::shared_ptr<DBDelegate>)>; 52 DataShareServiceImpl() = default; 53 virtual ~DataShareServiceImpl(); 54 int32_t Insert(const std::string &uri, const DataShareValuesBucket &valuesBucket) override; 55 int32_t Update(const std::string &uri, const DataSharePredicates &predicate, 56 const DataShareValuesBucket &valuesBucket) override; 57 int32_t Delete(const std::string &uri, const DataSharePredicates &predicate) override; 58 std::pair<int32_t, int32_t> InsertEx(const std::string &uri, const std::string &extUri, 59 const DataShareValuesBucket &valuesBucket) override; 60 std::pair<int32_t, int32_t> UpdateEx(const std::string &uri, const std::string &extUri, 61 const DataSharePredicates &predicate, const DataShareValuesBucket &valuesBucket) override; 62 std::pair<int32_t, int32_t> DeleteEx(const std::string &uri, const std::string &extUri, 63 const DataSharePredicates &predicate) override; 64 std::shared_ptr<DataShareResultSet> Query(const std::string &uri, const std::string &extUri, 65 const DataSharePredicates &predicates, const std::vector<std::string> &columns, int &errCode) override; 66 int32_t AddTemplate(const std::string &uri, const int64_t subscriberId, const Template &tplt) override; 67 int32_t DelTemplate(const std::string &uri, const int64_t subscriberId) override; 68 std::vector<OperationResult> Publish(const Data &data, const std::string &bundleNameOfProvider) override; 69 Data GetData(const std::string &bundleNameOfProvider, int &errorCode) override; 70 std::vector<OperationResult> SubscribeRdbData(const std::vector<std::string> &uris, 71 const TemplateId &id, const sptr<IDataProxyRdbObserver> observer) override; 72 std::vector<OperationResult> UnsubscribeRdbData( 73 const std::vector<std::string> &uris, const TemplateId &id) override; 74 std::vector<OperationResult> EnableRdbSubs( 75 const std::vector<std::string> &uris, const TemplateId &id) override; 76 std::vector<OperationResult> DisableRdbSubs( 77 const std::vector<std::string> &uris, const TemplateId &id) override; 78 std::vector<OperationResult> SubscribePublishedData(const std::vector<std::string> &uris, 79 const int64_t subscriberId, const sptr<IDataProxyPublishedDataObserver> observer) override; 80 std::vector<OperationResult> UnsubscribePublishedData(const std::vector<std::string> &uris, 81 const int64_t subscriberId) override; 82 std::vector<OperationResult> EnablePubSubs(const std::vector<std::string> &uris, 83 const int64_t subscriberId) override; 84 std::vector<OperationResult> DisablePubSubs(const std::vector<std::string> &uris, 85 const int64_t subscriberId) override; 86 void OnConnectDone() override; 87 int32_t OnBind(const BindInfo &binderInfo) override; 88 int32_t OnAppExit(pid_t uid, pid_t pid, uint32_t tokenId, const std::string &bundleName) override; 89 int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; 90 int32_t OnAppUpdate(const std::string &bundleName, int32_t user, int32_t index) override; 91 void NotifyObserver(const std::string &uri) override; 92 void DumpDataShareServiceInfo(int fd, std::map<std::string, std::vector<std::string>> ¶ms); 93 int32_t OnInitialize() override; 94 int32_t EnableSilentProxy(const std::string &uri, bool enable) override; 95 int32_t GetSilentProxyStatus(const std::string &uri, bool isCreateHelper) override; 96 int32_t RegisterObserver(const std::string &uri, const sptr<OHOS::IRemoteObject> &remoteObj) override; 97 int32_t UnregisterObserver(const std::string &uri, const sptr<OHOS::IRemoteObject> &remoteObj) override; 98 private: 99 class SystemAbilityStatusChangeListener; 100 using StaticActs = DistributedData::StaticActs; 101 class DataShareStatic : public StaticActs { 102 public: ~DataShareStatic()103 ~DataShareStatic() override {}; 104 int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; 105 int32_t OnAppUpdate(const std::string &bundleName, int32_t user, int32_t index) override; 106 int32_t OnClearAppStorage(const std::string &bundleName, int32_t user, int32_t index, int32_t tokenId) override; 107 }; 108 class Factory { 109 public: 110 Factory(); 111 ~Factory(); 112 private: 113 std::shared_ptr<DataShareStatic> staticActs_; 114 }; 115 class TimerReceiver : public EventFwk::CommonEventSubscriber { 116 public: 117 TimerReceiver() = default; 118 explicit TimerReceiver(const EventFwk::CommonEventSubscribeInfo &subscriberInfo); 119 virtual ~TimerReceiver() = default; 120 void OnReceiveEvent(const EventFwk::CommonEventData &eventData) override; 121 }; 122 void RegisterDataShareServiceInfo(); 123 void RegisterHandler(); 124 bool SubscribeTimeChanged(); 125 bool NotifyChange(const std::string &uri); 126 bool GetCallerBundleName(std::string &bundleName); 127 int32_t Execute(const std::string &uri, const std::string &extUri, const int32_t tokenId, 128 bool isRead, ExecuteCallback callback); 129 std::pair<int32_t, int32_t> ExecuteEx(const std::string &uri, const std::string &extUri, const int32_t tokenId, 130 bool isRead, ExecuteCallbackEx callback); 131 int32_t GetBMSAndMetaDataStatus(const std::string &uri, const int32_t tokenId); 132 void SubscribeCommonEvent(); 133 static void InitSubEvent(); 134 void AutoLaunch(const DistributedData::Event &event); 135 void SubscribeChange(); 136 bool AllowCleanDataLaunchApp(const DistributedData::Event &event, bool launchForCleanData); 137 static void SaveLaunchInfo(const std::string &bundleName, const std::string &userId, 138 const std::string &deviceId); 139 static DistributedData::StoreMetaData MakeMetaData(const std::string &bundleName, const std::string &userId, 140 const std::string &deviceId, const std::string storeId = ""); 141 void ReportExcuteFault(uint32_t callingTokenId, DataProviderConfig::ProviderInfo &providerInfo, 142 int32_t errCode, std::string &func); 143 static Factory factory_; 144 static constexpr int32_t ERROR = -1; 145 static constexpr int32_t ERROR_PERMISSION_DENIED = -2; 146 static constexpr const char *PROXY_URI_SCHEMA = "datashareproxy"; 147 static constexpr const char *EXT_URI_SCHEMA = "datashare://"; 148 PublishStrategy publishStrategy_; 149 GetDataStrategy getDataStrategy_; 150 SubscribeStrategy subscribeStrategy_; 151 TemplateStrategy templateStrategy_; 152 RdbNotifyStrategy rdbNotifyStrategy_; 153 BindInfo binderInfo_; 154 std::shared_ptr<TimerReceiver> timerReceiver_ = nullptr; 155 DataShareSilentConfig dataShareSilentConfig_; 156 }; 157 } // namespace OHOS::DataShare 158 #endif // DATASHARESERVICE_DATA_SERVICE_IMPL_H 159