diff --git a/frameworks/kits/ability/ability_runtime/include/ability_connection.h b/frameworks/kits/ability/ability_runtime/include/ability_connection.h old mode 100644 new mode 100755 index 13ec528008ebd0e9b72b6ed097c79bb555e90e09..a816e014ad8b252e79073e7b241b113b5ebc71d2 --- a/frameworks/kits/ability/ability_runtime/include/ability_connection.h +++ b/frameworks/kits/ability/ability_runtime/include/ability_connection.h @@ -62,8 +62,25 @@ public: * @param resultCode, ERR_OK on success, others on failure. */ void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override; + + /** + * set abilityConnectCallback + * + * @param abilityConnectCallback is used to notify caller ability that connect or disconnect is complete + */ + void SetConnectCallback(std::shared_ptr abilityConnectCallback); + + void SetRemoteObject(const sptr &remoteObject); + + void SetResultCode(int resultCode); + + sptr GetRemoteObject(); + + int GetResultCode(); private: std::shared_ptr abilityConnectCallback_; + sptr remoteObject_; + int resultCode_; }; } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/kits/ability/ability_runtime/include/ability_context.h b/frameworks/kits/ability/ability_runtime/include/ability_context.h old mode 100644 new mode 100755 index 9f0563d58bdf77459bf9b61116c0abf846f02b41..10c6e2dae63788906be4cebeceb89be0afd103b1 --- a/frameworks/kits/ability/ability_runtime/include/ability_context.h +++ b/frameworks/kits/ability/ability_runtime/include/ability_context.h @@ -71,23 +71,24 @@ public: virtual void OnAbilityResult(int requestCode, int resultCode, const AAFwk::Want &resultData) = 0; /** - * @brief Connects the current ability to an ability using the AbilityInfo.AbilityType.SERVICE template. - * - * @param want Indicates the want containing information about the ability to connect - * @param conn Indicates the callback object when the target ability is connected. - * @return True means success and false means failure - */ + * @brief Connects the current ability to an ability using the AbilityInfo.AbilityType.SERVICE template. + * + * @param want Indicates the want containing information about the ability to connect + * @param connectCallback Indicates the callback object when the target ability is connected. + * @return True means success and false means failure + */ virtual bool ConnectAbility(const AAFwk::Want &want, - const std::shared_ptr &connectCallback) = 0; + const std::shared_ptr &connectCallback) = 0; /** - * @brief Disconnects the current ability from an ability - * - * @param conn Indicates the IAbilityConnection callback object passed by connectAbility after the connection - * is set up. The IAbilityConnection object uniquely identifies a connection between two abilities. - */ + * @brief Disconnects the current ability from an ability + * + * @param want Indicates the want containing information about the ability to disconnect + * @param connectCallback Indicates the callback object when the target ability is connected. + * is set up. The IAbilityConnection object uniquely identifies a connection between two abilities. + */ virtual void DisconnectAbility(const AAFwk::Want &want, - const std::shared_ptr &connectCallback) = 0; + const std::shared_ptr &connectCallback) = 0; /** * @brief get ability info of the current ability diff --git a/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp b/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp old mode 100644 new mode 100755 index b5ebc37be25832bbfeed2fd326c7fee70ceaf9b3..eceed62a444a05de8da579ae85374209a1fbc9e5 --- a/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp +++ b/frameworks/kits/ability/ability_runtime/src/ability_connection.cpp @@ -19,6 +19,7 @@ namespace OHOS { namespace AbilityRuntime { +const int DIED = -1; AbilityConnection::AbilityConnection(const std::shared_ptr &abilityConnectCallback) { abilityConnectCallback_ = abilityConnectCallback; @@ -31,6 +32,8 @@ void AbilityConnection::OnAbilityConnectDone( if (abilityConnectCallback_ == nullptr) { HILOG_ERROR("%{public}s abilityConnectCallback is nullptr.", __func__); } + SetRemoteObject(remoteObject); + SetResultCode(resultCode); abilityConnectCallback_->OnAbilityConnectDone(element, remoteObject, resultCode); HILOG_DEBUG("%{public}s end, remoteObject:%{public}p, bundleName:%{public}s, abilityName:%{public}s.", __func__, remoteObject.GetRefPtr(), element.GetBundleName().c_str(), element.GetAbilityName().c_str()); @@ -38,13 +41,47 @@ void AbilityConnection::OnAbilityConnectDone( void AbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) { - HILOG_DEBUG("%{public}s begin.", __func__); + HILOG_DEBUG("%{public}s begin, resultCode:%{public}d.", __func__, resultCode); if (abilityConnectCallback_ == nullptr) { HILOG_ERROR("%{public}s abilityConnectCallback is nullptr.", __func__); } - abilityConnectCallback_->OnAbilityDisconnectDone(element, resultCode); + // if resultCode < 0 that means the connectReceiver is died + if (resultCode == DIED) { + bool ret = ConnectionManager::GetInstance().DisconnectReceiver(element); + if (ret) { + HILOG_INFO("The service connection is not disconnected."); + } + abilityConnectCallback_->OnAbilityDisconnectDone(element, DIED + 1); + } else { + abilityConnectCallback_->OnAbilityDisconnectDone(element, resultCode); + } HILOG_DEBUG("%{public}s end, bundleName:%{public}s, abilityName:%{public}s.", __func__, element.GetBundleName().c_str(), element.GetAbilityName().c_str()); } + +void AbilityConnection::SetConnectCallback(std::shared_ptr abilityConnectCallback) +{ + abilityConnectCallback_ = abilityConnectCallback; +} + +void AbilityConnection::SetRemoteObject(const sptr &remoteObject) +{ + remoteObject_ = remoteObject; +} + +void AbilityConnection::SetResultCode(int resultCode) +{ + resultCode_ = resultCode; +} + +sptr AbilityConnection::GetRemoteObject() +{ + return remoteObject_; +} + +int AbilityConnection::GetResultCode() +{ + return resultCode_; +} } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp b/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp old mode 100644 new mode 100755 index e380e4ce517e7793042976394eacf6c58e04386b..2d832f15dd51fac7ae7b45ebb37f176ae4a2e2ee --- a/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp +++ b/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp @@ -51,21 +51,32 @@ ErrCode ConnectionManager::ConnectAbility(const sptr &connectCall if (item != abilityConnections_.end()) { std::vector> callbacks = item->second; callbacks.push_back(connectCallback); + abilityConnections_[item->first] = callbacks; abilityConnection = item->first.abilityConnection; - HILOG_INFO("%{public}s find abilityConnection:%{public}p exist, callbackSize:%{public}d.", + abilityConnection->SetConnectCallback(connectCallback); + HILOG_INFO("%{public}s end, find abilityConnection:%{public}p exist, callbackSize:%{public}d.", __func__, abilityConnection.GetRefPtr(), (int32_t)callbacks.size()); + if (abilityConnection->GetResultCode() == ERR_OK) { + connectCallback->OnAbilityConnectDone(connectReceiver, abilityConnection->GetRemoteObject(), + abilityConnection->GetResultCode()); + return ERR_OK; + } else { + return AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller); + } } else { abilityConnection = new AbilityConnection(connectCallback); - ConnectionInfo connectionInfo(connectCaller, connectReceiver, abilityConnection); - std::vector> callbacks; - callbacks.push_back(connectCallback); - abilityConnections_[connectionInfo] = callbacks; - HILOG_DEBUG("%{public}s end, abilityConnection is not exist, make a new abilityConnection.", __func__); - HILOG_DEBUG("%{public}s end, abilityConnection: %{public}p, abilityConnectionsSize:%{public}d.", + ErrCode ret = + AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller); + if (ret == ERR_OK) { + ConnectionInfo connectionInfo(connectCaller, connectReceiver, abilityConnection); + std::vector> callbacks; + callbacks.push_back(connectCallback); + abilityConnections_[connectionInfo] = callbacks; + } + HILOG_DEBUG("%{public}s end, not find connection, connection: %{public}p, abilityConnectionsSize:%{public}d.", __func__, abilityConnection.GetRefPtr(), (int32_t)abilityConnections_.size()); + return ret; } - - return AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller); } ErrCode ConnectionManager::DisconnectAbility(const sptr &connectCaller, @@ -90,19 +101,26 @@ ErrCode ConnectionManager::DisconnectAbility(const sptr &connectC if (item != abilityConnections_.end()) { std::vector> callbacks = item->second; HILOG_DEBUG("%{public}s begin remove callback, callbackSize:%{public}d.", __func__, (int32_t)callbacks.size()); - for (auto iter = callbacks.begin(); iter != callbacks.end(); iter++) { + auto iter = callbacks.begin(); + while (iter != callbacks.end()) { if (*iter == connectCallback) { - callbacks.erase(iter); + iter = callbacks.erase(iter); + } else { + iter++; } } + abilityConnections_[item->first] = callbacks; sptr abilityConnection; abilityConnection = item->first.abilityConnection; + abilityConnection->SetConnectCallback(connectCallback); HILOG_INFO("%{public}s end, find abilityConnection:%{public}p exist, abilityConnectionsSize:%{public}d.", __func__, abilityConnection.GetRefPtr(), (int32_t)abilityConnections_.size()); if (callbacks.size() == 0) { + abilityConnections_.erase(item); HILOG_DEBUG("%{public}s disconnectAbility.", __func__); return AAFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(abilityConnection); } else { + connectCallback->OnAbilityDisconnectDone(connectReceiver, ERR_OK); HILOG_DEBUG("%{public}s callbacks is not empty, do not need disconnectAbility.", __func__); return ERR_OK; } @@ -119,13 +137,17 @@ bool ConnectionManager::DisconnectCaller(const sptr &connectCalle HILOG_ERROR("%{public}s end, connectCaller is nullptr.", __func__); return false; } + HILOG_DEBUG("%{public}s, connectCaller:%{public}p, abilityConnectionsSize:%{public}d.", __func__, connectCaller.GetRefPtr(), (int32_t)abilityConnections_.size()); + bool isDisconnect = false; auto iter = abilityConnections_.begin(); while (iter != abilityConnections_.end()) { ConnectionInfo connectionInfo = iter->first; if (IsConnectCallerEqual(connectionInfo.connectCaller, connectCaller)) { + HILOG_DEBUG("%{public}s DisconnectAbility connection:%{public}p.", + __func__, connectionInfo.abilityConnection.GetRefPtr()); ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(connectionInfo.abilityConnection); if (ret != ERR_OK) { @@ -147,16 +169,12 @@ bool ConnectionManager::DisconnectReceiver(const AppExecFwk::ElementName &connec HILOG_DEBUG("%{public}s begin, abilityConnectionsSize:%{public}d, bundleName:%{public}s, abilityName:%{public}s.", __func__, (int32_t)abilityConnections_.size(), connectReceiver.GetBundleName().c_str(), connectReceiver.GetAbilityName().c_str()); + bool isDisconnect = false; auto iter = abilityConnections_.begin(); while (iter != abilityConnections_.end()) { ConnectionInfo connectionInfo = iter->first; if (IsConnectReceiverEqual(connectionInfo.connectReceiver, connectReceiver)) { - ErrCode ret = - AAFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(connectionInfo.abilityConnection); - if (ret != ERR_OK) { - HILOG_ERROR("%{public}s ams->DisconnectAbility error, ret=%{public}d", __func__, ret); - } iter = abilityConnections_.erase(iter); isDisconnect = true; } else { diff --git a/frameworks/kits/ability/native/include/service_extension.h b/frameworks/kits/ability/native/include/service_extension.h old mode 100644 new mode 100755 index 044a00dc63025932e6b58aefd1640f39d0496548..8153c6746592ecc7ccb96fc862ac2cc0b87a9582 --- a/frameworks/kits/ability/native/include/service_extension.h +++ b/frameworks/kits/ability/native/include/service_extension.h @@ -66,12 +66,6 @@ public: * @return The ServiceExtension instance. */ static ServiceExtension* Create(const std::unique_ptr& runtime); - - /** - * @brief Stop the extension. - * - */ - virtual void OnStop() override; }; } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/kits/ability/native/src/ability.cpp b/frameworks/kits/ability/native/src/ability.cpp old mode 100644 new mode 100755 index f62297a73c27f7b73a2307c3e4371f54baca87b7..d266dca5e9cc3e35d46495e1952f935d0ace1a41 --- a/frameworks/kits/ability/native/src/ability.cpp +++ b/frameworks/kits/ability/native/src/ability.cpp @@ -267,11 +267,6 @@ void Ability::OnStop() return; } lifecycle_->DispatchLifecycle(LifeCycle::Event::ON_STOP); - - bool ret = AbilityRuntime::ConnectionManager::GetInstance().DisconnectCaller(AbilityContext::token_); - if (ret) { - APP_LOGI("The service connection is not disconnected."); - } APP_LOGI("%{public}s end.", __func__); } diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp old mode 100644 new mode 100755 index 8341a2f764b5863201ff56b24848bf652d62ddb5..e087171f79f131380580987d43c943cb6abc7a0e --- a/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp @@ -18,6 +18,7 @@ #include "ability_runtime/js_ability_context.h" #include "ability_runtime/js_window_stage.h" #include "ability_start_setting.h" +#include "connection_manager.h" #include "hilog_wrapper.h" #include "js_data_struct_converter.h" #include "js_runtime.h" @@ -116,6 +117,10 @@ void JsAbility::OnStop() Ability::OnStop(); CallObjectMethod("onDestroy"); + bool ret = ConnectionManager::GetInstance().DisconnectCaller(AbilityContext::token_); + if (ret) { + HILOG_INFO("The service connection is not disconnected."); + } } void JsAbility::OnSceneCreated() diff --git a/frameworks/kits/ability/native/src/js_service_extension.cpp b/frameworks/kits/ability/native/src/js_service_extension.cpp old mode 100644 new mode 100755 index 4437c35f9c474e0d0ad839094454a24db94d7a07..c4294fa2cc0ac9cb5babb1800d19e909b018ed77 --- a/frameworks/kits/ability/native/src/js_service_extension.cpp +++ b/frameworks/kits/ability/native/src/js_service_extension.cpp @@ -107,6 +107,10 @@ void JsServiceExtension::OnStop() ServiceExtension::OnStop(); HILOG_INFO("JsServiceExtension OnStop begin."); CallObjectMethod("onDestroy"); + bool ret = ConnectionManager::GetInstance().DisconnectCaller(GetContext()->GetToken()); + if (ret) { + HILOG_INFO("The service extension connection is not disconnected."); + } HILOG_INFO("%{public}s end.", __func__); } diff --git a/frameworks/kits/ability/native/src/service_extension.cpp b/frameworks/kits/ability/native/src/service_extension.cpp old mode 100644 new mode 100755 index f360b81668a29d88e99831aa1ef00314839530e6..d80007139c14a88e188bd8f398cdc3074d3821b5 --- a/frameworks/kits/ability/native/src/service_extension.cpp +++ b/frameworks/kits/ability/native/src/service_extension.cpp @@ -65,14 +65,5 @@ std::shared_ptr ServiceExtension::CreateAndInitContext( context->SetAbilityInfo(record->GetAbilityInfo()); return context; } - -void ServiceExtension::OnStop() -{ - Extension::OnStop(); - bool ret = ConnectionManager::GetInstance().DisconnectCaller(GetContext()->GetToken()); - if (ret) { - HILOG_INFO("The service connection is not disconnected."); - } -} } } \ No newline at end of file diff --git a/frameworks/kits/ability/native/test/mock/include/bundle_mgr_interface.h b/frameworks/kits/ability/native/test/mock/include/bundle_mgr_interface.h index cea500ac69bb2dedbb04eb31d7f2fa83bac59fef..9404f4d2f6379b87dc337270965931a9b53cab5a 100644 --- a/frameworks/kits/ability/native/test/mock/include/bundle_mgr_interface.h +++ b/frameworks/kits/ability/native/test/mock/include/bundle_mgr_interface.h @@ -27,6 +27,7 @@ #include "ohos/aafwk/content/want.h" #include "permission_def.h" #include "module_usage_record.h" +#include "distributed_bundle_info.h" using OHOS::AAFwk::Want; @@ -228,6 +229,9 @@ public: virtual bool RemoveClonedBundle(const std::string &bundleName, const int32_t uid) = 0; virtual bool BundleClone(const std::string &bundleName) = 0; virtual bool CheckBundleNameInAllowList(const std::string &bundleName) = 0; + virtual bool GetDistributedBundleInfo( + const std::string &networkId, int32_t userId, const std::string &bundleName, + DistributedBundleInfo &distributedBundleInfo) = 0; enum class Message { GET_APPLICATION_INFO, diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h index 572bf7c4d0f2b6ed27da3ce50fdd8fb1b02bab40..fd36397f62477ec45af4ff427cb209cfd89e63d7 100755 --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h @@ -219,6 +219,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } enum RequestCode { E_STATE_INITIAL = 0, diff --git a/frameworks/kits/ability/native/test/mock/include/mock_bundle_manager.h b/frameworks/kits/ability/native/test/mock/include/mock_bundle_manager.h index 96c88016bae01b31fde8dabdbf10b031ebf5a352..8ab2ec5c246b517bcab686cdde0d5621e5ce1a0e 100644 --- a/frameworks/kits/ability/native/test/mock/include/mock_bundle_manager.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_bundle_manager.h @@ -98,7 +98,8 @@ public: const int32_t number, std::vector &moduleUsageRecords) override; virtual sptr GetBundleInstaller() override; virtual bool NotifyAbilityLifeStatus( - const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) override; + const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) + override; }; class BundleMgrStub : public IRemoteStub { @@ -174,7 +175,8 @@ public: const int32_t number, std::vector &moduleUsageRecords) override; virtual sptr GetBundleInstaller() override; virtual bool NotifyAbilityLifeStatus( - const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) override; + const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) + override; virtual bool GetBundleGidsByUid(const std::string &bundleName, const int &uid, std::vector &gids) override { return true; @@ -205,6 +207,12 @@ public: { return true; } + virtual bool GetDistributedBundleInfo( + const std::string &networkId, int32_t userId, const std::string &bundleName, + DistributedBundleInfo &distributedBundleInfo) override + { + return true; + } }; } // namespace AppExecFwk } // namespace OHOS diff --git a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h index 2c172379b52e42422081f5924fa5fce4c66b09b8..6e2af77dfd3d02d8809c70055fc10007972d185f 100644 --- a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h @@ -186,6 +186,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } AbilityLifeCycleState curstate_ = AbilityLifeCycleState::ABILITY_STATE_INITIAL; sptr abilityScheduler_; // kit interface used to schedule ability life diff --git a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h index c27d94e0e0c96b0993914336873ec8eac1f2f9f7..90a6d7f0fbd4648369d2abfb68aba47ecd6bad33 100755 --- a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h @@ -202,6 +202,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } sptr abilityScheduler_ = nullptr; // kit interface used to schedule ability life Want want_; diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_client.h b/interfaces/innerkits/ability_manager/include/ability_manager_client.h index 57887f13dc8208f93c5ffb114d51adcb6efbd75a..f427149344664adf6101e95ed826676814b7b720 100644 --- a/interfaces/innerkits/ability_manager/include/ability_manager_client.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_client.h @@ -22,6 +22,7 @@ #include "ability_manager_errors.h" #include "ability_scheduler_interface.h" #include "ability_manager_interface.h" +#include "snapshot.h" #include "want.h" #include "iremote_object.h" @@ -568,6 +569,15 @@ public: */ ErrCode GetMissionInfo(const std::string& deviceId, int32_t missionId, MissionInfo &missionInfo); + /** + * @brief Get the Mission Snapshot Info object + * @param deviceId local or remote deviceid. + * @param missionId Id of target mission. + * @param snapshot snapshot of target mission + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot); + /** * @brief Clean mission by id. * @param missionId Id of target mission. @@ -623,6 +633,13 @@ public: * @return Returns ERR_OK on success, others on failure. */ ErrCode StopUser(int accountId, const sptr &callback); + + /** + * @brief Register the snapshot handler + * @param handler snapshot handler + * @return ErrCode Returns ERR_OK on success, others on failure. + */ + ErrCode RegisterSnapshotHandler(const sptr& handler); private: static std::mutex mutex_; static std::shared_ptr instance_; diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h index 31bf7e3d1cd20f5539966973008bb4329eded7d1..4357ee24a3c76fc40fa9f8b51c587f20dee25fdc 100755 --- a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h @@ -40,6 +40,7 @@ #include "system_memory_attr.h" #include "mission_listener_interface.h" #include "mission_info.h" +#include "snapshot.h" #include "start_options.h" #include "stop_user_callback.h" #include "remote_mission_listener_interface.h" @@ -531,6 +532,8 @@ public: virtual int GetMissionInfo(const std::string& deviceId, int32_t missionId, MissionInfo &missionInfo) = 0; + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) = 0; + virtual int CleanMission(int32_t missionId) = 0; virtual int CleanAllMissions() = 0; @@ -563,6 +566,13 @@ public: virtual int UnRegisterMissionListener(const std::string &deviceId, const sptr &listener) = 0; + /** + * @brief Register the snapshot handler + * @param handler snapshot handler + * @return int Returns ERR_OK on success, others on failure. + */ + virtual int RegisterSnapshotHandler(const sptr& handler) = 0; + enum { // ipc id 1-1000 for kit // ipc id for terminating ability (1) @@ -783,6 +793,7 @@ public: UNREGISTER_REMOTE_MISSION_LISTENER = 1111, START_SYNC_MISSIONS = 1112, STOP_SYNC_MISSIONS = 1113, + REGISTER_SNAPSHOT_HANDLER = 1114, // ipc id 2001-3000 for tools // ipc id for dumping state (2001) diff --git a/interfaces/innerkits/ability_manager/include/mission_snapshot.h b/interfaces/innerkits/ability_manager/include/mission_snapshot.h index ed1b0dd209a0ac37b8f6cbad71d35774a5efd914..ca1fdcbdf7a79b9252298d2e6f7e0d82fbba2f9f 100644 --- a/interfaces/innerkits/ability_manager/include/mission_snapshot.h +++ b/interfaces/innerkits/ability_manager/include/mission_snapshot.h @@ -37,9 +37,13 @@ struct MissionPixelMap : public Parcelable { static MissionPixelMap *Unmarshalling(Parcel &parcel); }; -struct MissionSnapshot { +struct MissionSnapshot : public Parcelable { AppExecFwk::ElementName topAbility; std::shared_ptr snapshot; + + bool ReadFromParcel(Parcel &parcel); + virtual bool Marshalling(Parcel &parcel) const override; + static MissionSnapshot *Unmarshalling(Parcel &parcel); }; } // namespace AAFwk diff --git a/interfaces/innerkits/ability_manager/include/snapshot.h b/interfaces/innerkits/ability_manager/include/snapshot.h new file mode 100644 index 0000000000000000000000000000000000000000..9236a4e8cb21232015e656cb759b070458b6c1d3 --- /dev/null +++ b/interfaces/innerkits/ability_manager/include/snapshot.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 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 OHOS_AAFWK_SNAPSHOT_H +#define OHOS_AAFWK_SNAPSHOT_H + +#include + +namespace OHOS { +namespace Media { +class PixelMap; +} +namespace AAFwk { +/** + * @class Snapshot + * Snapshot info + */ +class Snapshot { +public: + Snapshot() = default; + ~Snapshot() = default; + const std::shared_ptr& GetPixelMap() const + { + return pixelMap_; + } + void SetPixelMap(const std::shared_ptr& pixelMap) + { + pixelMap_ = pixelMap; + } +private: + std::shared_ptr pixelMap_ = nullptr; +}; + +/** + * @class ISnapshotHandler + * Snapshot handler, use to get snapshot + */ +class ISnapshotHandler : public OHOS::IRemoteBroker { +public: + DECLARE_INTERFACE_DESCRIPTOR(u"ohos.aafwk.SnapshotHandler"); + + enum { + TRANS_ID_GET_SNAPSHOT + }; + + /** + * @brief Get the Snapshot object + * @param token remote object token + * @param snapshot the application snapshot + * @return int32_t function result + */ + virtual int32_t GetSnapshot(const sptr& token, Snapshot& snapshot) = 0; +}; +} // namespace AAFwk +} // namespace OHOS +#endif // OHOS_AAFWK_SNAPSHOT_H \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn b/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn index 000028cc9b249751c6108a08f0b96885435e7d3b..f0acd3349d46a65a576a965fe4856357306da6be 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn +++ b/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn @@ -46,6 +46,7 @@ ohos_shared_library("missionmanager_napi") { "appexecfwk_standard:appexecfwk_base", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "multimedia_image_standard:image", ] relative_install_dir = "module/application" diff --git a/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp b/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp index 1deb73c862f381caa2fdfbd863af6c68a6153262..3f9a59de06d0b5193ea1cb7913dd463ac851f804 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp +++ b/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp @@ -23,6 +23,7 @@ #include "js_mission_listener.h" #include "js_runtime_utils.h" #include "mission_snapshot.h" +#include "pixel_map_napi.h" #include @@ -30,6 +31,10 @@ namespace OHOS { namespace AbilityRuntime { using namespace OHOS::AppExecFwk; using AbilityManagerClient = AAFwk::AbilityManagerClient; +namespace { + constexpr int32_t ARG_COUNT_TWO = 1; + constexpr int32_t ARG_COUNT_THREE = 1; +} class JsMissionManager { public: JsMissionManager() = default; @@ -241,7 +246,38 @@ private: NativeValue* OnGetMissionSnapShot(NativeEngine &engine, NativeCallbackInfo &info) { HILOG_INFO("%{public}s is called", __FUNCTION__); - return nullptr; + if (info.argc != ARG_COUNT_TWO && info.argc != ARG_COUNT_THREE) { + HILOG_ERROR("missionSnapshot: need two or three params"); + return engine.CreateUndefined(); + } + std::string deviceId; + if (!ConvertFromJsValue(engine, info.argv[0], deviceId)) { + HILOG_ERROR("missionSnapshot: Parse deviceId failed"); + return engine.CreateUndefined(); + } + int32_t missionId = -1; + if (!ConvertFromJsValue(engine, info.argv[0], missionId)) { + HILOG_ERROR("missionSnapshot: Parse missionId failed"); + return engine.CreateUndefined(); + } + AsyncTask::CompleteCallback complete = + [deviceId, missionId](NativeEngine &engine, AsyncTask &task, int32_t status) { + AAFwk::MissionSnapshot missionSnapshot; + auto errcode = AbilityManagerClient::GetInstance()->GetMissionSnapshot( + deviceId, missionId, missionSnapshot); + if (errcode == 0) { + auto nativeValue = reinterpret_cast(Media::PixelMapNapi::CreatePixelMap( + reinterpret_cast(&engine), missionSnapshot.snapshot)); + task.Resolve(engine, nativeValue); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "Get mission snapshot failed.")); + } + }; + NativeValue* lastParam = (info.argc == ARG_COUNT_TWO) ? nullptr : info.argv[2]; + NativeValue* result = nullptr; + AsyncTask::Schedule( + engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; } NativeValue* OnLockMission(NativeEngine &engine, NativeCallbackInfo &info) diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 849cd60fd050785f28de4d9fa0dbe7733ed1c5fb..ed35e559fbf1f0a4b0e67c33ff2e595399163ee1 100755 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -531,6 +531,10 @@ public: virtual int UnRegisterMissionListener(const std::string &deviceId, const sptr &listener) override; + virtual int RegisterSnapshotHandler(const sptr& handler) override; + + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) override; + private: template int GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos); diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 04fd7a110a0ec988bafe20e06026953bf42457ab..bf5bee2b625af1d1424465bf13e541eacc0cb0c8 100755 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -707,6 +707,11 @@ public: virtual int StopUser(int userId, const sptr &callback) override; + virtual int RegisterSnapshotHandler(const sptr& handler) override; + + virtual int32_t GetMissionSnapshot(const std::string& deviceId, int32_t missionId, + MissionSnapshot& snapshot) override; + // MSG 0 - 20 represents timeout message static constexpr uint32_t LOAD_TIMEOUT_MSG = 0; static constexpr uint32_t ACTIVE_TIMEOUT_MSG = 1; @@ -890,6 +895,7 @@ private: std::unordered_map> missionListManagers_; std::shared_ptr currentMissionListManager_; std::shared_ptr kernalAbilityManager_; + sptr snapshotHandler_; }; } // namespace AAFwk diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index 3609c0e65b2b05162e7a6853b3c9f2d4dd35c996..21aa80c8c3da4f0cd18edd053940fea62117fc33 100755 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -128,6 +128,8 @@ private: int StartSyncRemoteMissionsInner(MessageParcel &data, MessageParcel &reply); int StopSyncRemoteMissionsInner(MessageParcel &data, MessageParcel &reply); + int RegisterSnapshotHandlerInner(MessageParcel &data, MessageParcel &reply); + int GetMissionSnapshotInfoInner(MessageParcel &data, MessageParcel &reply); using RequestFuncType = int (AbilityManagerStub::*)(MessageParcel &data, MessageParcel &reply); std::map requestFuncMap_; diff --git a/services/abilitymgr/include/connection_record.h b/services/abilitymgr/include/connection_record.h old mode 100644 new mode 100755 index 78894354ecc4ec53be7b2b107dbfdd0519984c83..0dbc77a3eff2639b467fa509ff6b417670bf8b93 --- a/services/abilitymgr/include/connection_record.h +++ b/services/abilitymgr/include/connection_record.h @@ -101,7 +101,7 @@ public: * complete disconnect ability and invoke callback. * */ - void CompleteDisconnect(int resultCode); + void CompleteDisconnect(int resultCode, bool isDied); /** * scheduler target service disconnect done. diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp old mode 100644 new mode 100755 index 29356963aa464e6f8415238346f5f3c81ef18843..7ef5c48e229ca083999203cc2b680f0e0cedc5e3 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -660,7 +660,7 @@ void AbilityConnectManager::HandleDisconnectTask(const ConnectListType &connectl if (targetService && connectRecord->GetConnectState() == ConnectionState::DISCONNECTED && targetService->GetConnectRecordList().size() > 1) { HILOG_WARN("This record complete disconnect directly. recordId:%{public}d", connectRecord->GetRecordId()); - connectRecord->CompleteDisconnect(ERR_OK); + connectRecord->CompleteDisconnect(ERR_OK, false); targetService->RemoveConnectRecordFromList(connectRecord); RemoveConnectionRecordFromMap(connectRecord); }; @@ -907,7 +907,7 @@ void AbilityConnectManager::HandleAbilityDiedTask(const std::shared_ptrGetConnectRecordList(); for (auto &connectRecord : connlist) { HILOG_WARN("This record complete disconnect directly. recordId:%{public}d", connectRecord->GetRecordId()); - connectRecord->CompleteDisconnect(ERR_OK); + connectRecord->CompleteDisconnect(ERR_OK, true); abilityRecord->RemoveConnectRecordFromList(connectRecord); RemoveConnectionRecordFromMap(connectRecord); } diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index 8c336f67077ae0a39f8f55b7db44da05f84fdb0a..c54f280f0dbb3be3544f592e1e572c3ffd15c99f 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -794,5 +794,20 @@ ErrCode AbilityManagerClient::StopUser(int accountId, const sptr abms = iface_cast(remoteObject_); return abms->StopUser(accountId, callback); } + +ErrCode AbilityManagerClient::RegisterSnapshotHandler(const sptr& handler) +{ + CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); + auto abms = iface_cast(remoteObject_); + return abms->RegisterSnapshotHandler(handler); +} + +ErrCode AbilityManagerClient::GetMissionSnapshot(const std::string& deviceId, int32_t missionId, + MissionSnapshot& snapshot) +{ + CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); + auto abms = iface_cast(remoteObject_); + return abms->GetMissionSnapshot(deviceId, missionId, snapshot); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 0d8de5e105ba4e84e45187b0a90fb3b8ff63ad3f..559c1dcbf6121a171986905ea5c3c9aae70ee53c 100755 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -666,6 +666,38 @@ int AbilityManagerProxy::GetMissionSnapshot(const int32_t missionId, MissionPixe return reply.ReadInt32(); } +int AbilityManagerProxy::GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) +{ + int error; + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteString(deviceId)) { + HILOG_ERROR("deviceId write failed."); + return INNER_ERR; + } + if (!data.WriteInt32(missionId)) { + HILOG_ERROR("missionId write failed."); + return ERR_INVALID_VALUE; + } + error = Remote()->SendRequest(IAbilityManager::GET_MISSION_SNAPSHOT, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Send request error: %{public}d", error); + return error; + } + std::unique_ptr info(reply.ReadParcelable()); + if (!info) { + HILOG_ERROR("readParcelableInfo failed."); + return ERR_UNKNOWN_OBJECT; + } + snapshot = *info; + return reply.ReadInt32(); +} + int AbilityManagerProxy::MoveMissionToTop(int32_t missionId) { int error; @@ -2033,5 +2065,25 @@ int AbilityManagerProxy::UnRegisterMissionListener(const std::string &deviceId, } return reply.ReadInt32(); } + +int AbilityManagerProxy::RegisterSnapshotHandler(const sptr& handler) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteRemoteObject(handler->AsObject())) { + HILOG_ERROR("snapshot: handler write failed."); + return INNER_ERR; + } + auto error = Remote()->SendRequest(IAbilityManager::REGISTER_SNAPSHOT_HANDLER, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("snapshot: send request error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 3fc23ab7ce50183bde2b7f60c854cd450cdfd77b..016320bfe553c237c328b2727485b91cde39025d 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -2776,5 +2776,24 @@ int AbilityManagerService::StopUser(int userId, const sptr &c } return 0; } + +int AbilityManagerService::RegisterSnapshotHandler(const sptr& handler) +{ + HILOG_INFO("snapshot: AbilityManagerService register snapshot handler success."); + snapshotHandler_ = handler; + return 0; +} + +int32_t AbilityManagerService::GetMissionSnapshot(const std::string& deviceId, int32_t missionId, + MissionSnapshot& missionSnapshot) +{ + if (!snapshotHandler_) { + return 0; + } + Snapshot snapshot; + int32_t result = snapshotHandler_->GetSnapshot(GetAbilityTokenByMissionId(missionId), snapshot); + missionSnapshot.snapshot = snapshot.GetPixelMap(); + return result; +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 8f0ec348e006f7dbc60f281764cb985235cc7c9d..bfb6d7b5cd4f464bcfc8082a32e94900c402fc3c 100755 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -1179,5 +1179,32 @@ int AbilityManagerStub::UnRegisterRemoteMissionListenerInner(MessageParcel &data HILOG_INFO("AbilityManagerStub: UnRegisterRemoteMissionListenerInner result = %{public}d", result); return result; } + +int AbilityManagerStub::RegisterSnapshotHandlerInner(MessageParcel &data, MessageParcel &reply) +{ + sptr handler = iface_cast(data.ReadRemoteObject()); + if (handler == nullptr) { + HILOG_ERROR("snapshot: AbilityManagerStub read snapshot handler failed!"); + return ERR_NULL_OBJECT; + } + int32_t result = RegisterSnapshotHandler(handler); + HILOG_INFO("snapshot: AbilityManagerStub register snapshot handler result = %{public}d", result); + return result; +} + +int AbilityManagerStub::GetMissionSnapshotInfoInner(MessageParcel &data, MessageParcel &reply) +{ + std::string deviceId = data.ReadString(); + if (deviceId.empty()) { + HILOG_ERROR("missionSnapshot: get deviceId empty!"); + return ERR_NULL_OBJECT; + } + int32_t missionId = data.ReadInt32(); + MissionSnapshot missionSnapshot; + int32_t result = GetMissionSnapshot(deviceId, missionId, missionSnapshot); + HILOG_INFO("snapshot: AbilityManagerStub get snapshot result = %{public}d", result); + reply.WriteParcelable(&missionSnapshot); + return result; +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/connection_record.cpp b/services/abilitymgr/src/connection_record.cpp old mode 100644 new mode 100755 index 2ccef86617b6d2d34a8dbb7dd58f56b305da5fc0..56e8efe29a06b3e322487c32302800ecadb8982a --- a/services/abilitymgr/src/connection_record.cpp +++ b/services/abilitymgr/src/connection_record.cpp @@ -128,7 +128,7 @@ void ConnectionRecord::CompleteConnect(int resultCode) HILOG_INFO("result: %{public}d. connectstate:%{public}d.", resultCode, state_); } -void ConnectionRecord::CompleteDisconnect(int resultCode) +void ConnectionRecord::CompleteDisconnect(int resultCode, bool isDied) { if (resultCode == ERR_OK) { SetConnectState(ConnectionState::DISCONNECTED); @@ -137,7 +137,7 @@ void ConnectionRecord::CompleteDisconnect(int resultCode) const AppExecFwk::AbilityInfo &abilityInfo = targetService_->GetAbilityInfo(); AppExecFwk::ElementName element(abilityInfo.deviceId, abilityInfo.bundleName, abilityInfo.name); if (connCallback_) { - connCallback_->OnAbilityDisconnectDone(element, resultCode); + connCallback_->OnAbilityDisconnectDone(element, isDied ? (resultCode - 1) : resultCode); } HILOG_INFO("result: %{public}d. connectstate:%{public}d.", resultCode, state_); } @@ -157,7 +157,7 @@ void ConnectionRecord::ScheduleDisconnectAbilityDone() handler->RemoveTask(taskName); } - CompleteDisconnect(ERR_OK); + CompleteDisconnect(ERR_OK, false); } void ConnectionRecord::ScheduleConnectAbilityDone() diff --git a/services/abilitymgr/src/mission_snapshot.cpp b/services/abilitymgr/src/mission_snapshot.cpp index 1cb4cc918853ecf2dd85dfd87832c577220c1424..05caf6b6fa11132b679cb54ce288184493da5403 100644 --- a/services/abilitymgr/src/mission_snapshot.cpp +++ b/services/abilitymgr/src/mission_snapshot.cpp @@ -60,5 +60,45 @@ bool MissionPixelMap::Marshalling(Parcel &parcel) const } return true; } + +bool MissionSnapshot::ReadFromParcel(Parcel &parcel) +{ + std::unique_ptr ability(parcel.ReadParcelable()); + if (ability == nullptr) { + return false; + } + topAbility = *ability; + std::shared_ptr pixelMap(parcel.ReadParcelable()); + if (ability == nullptr) { + return false; + } + snapshot = pixelMap; + return true; +} + +MissionSnapshot *MissionSnapshot::Unmarshalling(Parcel &parcel) +{ + MissionSnapshot *info = new (std::nothrow) MissionSnapshot(); + if (info == nullptr) { + return nullptr; + } + + if (!info->ReadFromParcel(parcel)) { + delete info; + info = nullptr; + } + return info; +} + +bool MissionSnapshot::Marshalling(Parcel &parcel) const +{ + if (!parcel.WriteParcelable(&topAbility)) { + return false; + } + if (!parcel.WriteParcelable(snapshot.get())) { + return false; + } + return true; +} } // namespace AAFwk } // namespace OHOS \ No newline at end of file diff --git a/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h b/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h index adcaa9c71fdecab169652e42bc39d075a6677390..648a2fa206d3470256b00881209b79cab46e783b 100644 --- a/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h +++ b/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h @@ -31,6 +31,7 @@ #include "common_event_info.h" #include "on_permission_changed_callback_interface.h" #include "ohos/aafwk/content/want.h" +#include "distributed_bundle_info.h" namespace OHOS { namespace AppExecFwk { @@ -441,6 +442,9 @@ public: virtual bool RemoveClonedBundle(const std::string &bundleName, const int32_t uid) = 0; virtual bool BundleClone(const std::string &bundleName) = 0; virtual bool CheckBundleNameInAllowList(const std::string &bundleName) = 0; + virtual bool GetDistributedBundleInfo( + const std::string &networkId, int32_t userId, const std::string &bundleName, + DistributedBundleInfo &distributedBundleInfo) = 0; enum class Message { GET_APPLICATION_INFO, diff --git a/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h b/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h index 2eea64e49543ac8c01469ed0bc0a64ed703831ae..dce7b43aec785d0c5d4d2f637111f076cf70b5ee 100644 --- a/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h +++ b/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h @@ -143,7 +143,8 @@ public: const std::string &bundleName, const BundleFlag flag, BundleInfo &bundleInfo, int32_t userId) override; virtual bool NotifyAbilityLifeStatus( - const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) override; + const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) + override; virtual bool CheckIsSystemAppByUid(const int uid) override; MOCK_METHOD3(GetApplicationInfos, bool(const ApplicationFlag flag, const int userId, std::vector &appInfos)); @@ -227,7 +228,8 @@ public: bool CheckWantEntity(const AAFwk::Want &, AbilityInfo &); virtual bool NotifyAbilityLifeStatus( - const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) override; + const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) + override; MOCK_METHOD2(QueryWantAbility, int(const AAFwk::Want &want, std::vector &abilityInfos)); MOCK_METHOD3(GetApplicationInfos, bool(const ApplicationFlag flag, const int userId, std::vector &appInfos)); @@ -315,6 +317,12 @@ public: { return true; } + virtual bool GetDistributedBundleInfo( + const std::string &networkId, int32_t userId, const std::string &bundleName, + DistributedBundleInfo &distributedBundleInfo) override + { + return true; + } public: using QueryAbilityInfoFunType = diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h index 5f1bfccf16942f8b1d25295d1a2aba20f04b456a..3f452557446df0df8c303e841ead73170aef159f 100755 --- a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h @@ -326,6 +326,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } MOCK_METHOD2(TerminateAbilityByCaller, int(const sptr &callerToken, int requestCode)); MOCK_METHOD3(StartAbility, int(const Want &want, const sptr &callerToken, int requestCode)); MOCK_METHOD2( diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h index 5e8cc3294470a8f72d73b66e4e9b6ec13fcfa11a..77f2a6c4c091082a1f1d8aeb2c3505f66c535fbf 100755 --- a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h @@ -368,6 +368,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h index d7240704c88d2aaef438c65d4215ace8617b7779..f576842ebcea1d939d2c133721a45173b5e0ae77 100755 --- a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h @@ -130,6 +130,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/test/unittest/phone/connection_record_test/connection_record_test.cpp b/services/abilitymgr/test/unittest/phone/connection_record_test/connection_record_test.cpp old mode 100644 new mode 100755 index f9dbb791c34d61d099b28b2ca37d97d8bf87acff..8b0f157a10c268c2b645a4580379602cff7e35f9 --- a/services/abilitymgr/test/unittest/phone/connection_record_test/connection_record_test.cpp +++ b/services/abilitymgr/test/unittest/phone/connection_record_test/connection_record_test.cpp @@ -213,7 +213,7 @@ HWTEST_F(ConnectionRecordTest, AaFwk_ConnectionRecord_007, TestSize.Level1) { EXPECT_CALL(*callback_, OnAbilityDisconnectDone(::testing::_, ::testing::_)).Times(1); - connectionRecord_->CompleteDisconnect(ERR_OK); + connectionRecord_->CompleteDisconnect(ERR_OK, false); EXPECT_EQ(connectionRecord_->GetConnectState(), ConnectionState::DISCONNECTED); } diff --git a/services/test/mock/include/mock_ability_mgr_service.h b/services/test/mock/include/mock_ability_mgr_service.h index 168aad5e16d1bd8bb5c3638226634c084aa025f6..cad93a239f64e20afcaa5c2dbe39ca175a1b1370 100755 --- a/services/test/mock/include/mock_ability_mgr_service.h +++ b/services/test/mock/include/mock_ability_mgr_service.h @@ -136,6 +136,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } void Wait() { diff --git a/services/test/mock/include/mock_bundle_mgr.h b/services/test/mock/include/mock_bundle_mgr.h index c3bfb9e307d47761378559df4543edf1b0766cb2..127a7b8be033a05f7c0cece161fca71127ad0e6a 100644 --- a/services/test/mock/include/mock_bundle_mgr.h +++ b/services/test/mock/include/mock_bundle_mgr.h @@ -258,6 +258,8 @@ public: MOCK_METHOD2(GetShortcutInfos, bool(const std::string &bundleName, std::vector &shortcutInfos)); MOCK_METHOD2(QueryAbilityInfos, bool(const Want &want, std::vector &abilityInfos)); MOCK_METHOD2(QueryAbilityInfosForClone, bool(const Want &want, std::vector &abilityInfos)); + MOCK_METHOD4(GetDistributedBundleInfo, bool(const std::string &networkId, int32_t userId, + const std::string &bundleName, DistributedBundleInfo &distributedBundleInfo)); }; class BundleMgrStub : public IRemoteStub { @@ -373,7 +375,12 @@ public: { return true; } - + virtual bool GetDistributedBundleInfo( + const std::string &networkId, int32_t userId, const std::string &bundleName, + DistributedBundleInfo &distributedBundleInfo) override + { + return true; + } BundleMgrService() { abilityInfoMap_.emplace(COM_IX_HIWORLD, HiWordInfo); diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h index 27beedce574ce87affca716c368c2c5ee7a33d0f..0f0dd565e6a2684e76a1866bf9205507ce82b595 100755 --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -161,6 +161,14 @@ public: { return 0; } + virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) + { + return 0; + } + virtual int RegisterSnapshotHandler(const sptr& handler) + { + return 0; + } public: std::string powerState_; };