diff --git a/frameworks/kits/ability/ability_runtime/include/ability_context.h b/frameworks/kits/ability/ability_runtime/include/ability_context.h index c18295283c9561600171aa8f01f93061cf20ebc7..28c4d886cd7fa61d8916a569a574724c894af5ad 100644 --- a/frameworks/kits/ability/ability_runtime/include/ability_context.h +++ b/frameworks/kits/ability/ability_runtime/include/ability_context.h @@ -28,6 +28,10 @@ #include "want.h" #include "caller_callback.h" +#ifdef SUPPORT_GRAPHICS +#include "pixel_map.h" +#endif + namespace OHOS { namespace AbilityRuntime { using RuntimeTask = std::function; @@ -230,6 +234,16 @@ public: */ virtual ErrCode SetMissionLabel(const std::string &label) = 0; +#ifdef SUPPORT_GRAPHICS + /** + * @brief Set mission icon of this ability. + * + * @param icon the icon of this ability. + * @return Returns ERR_OK if success. + */ + virtual ErrCode SetMissionIcon(const std::shared_ptr &icon) = 0; +#endif + /** * @brief Get LocalCallContainer. * diff --git a/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h b/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h index 9b47197b96f444a525951e51e23301a181e32f8f..8e3d98bee400a7efaf691d97cf789721668f50a8 100644 --- a/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h +++ b/frameworks/kits/ability/ability_runtime/include/ability_context_impl.h @@ -91,6 +91,16 @@ public: */ ErrCode SetMissionLabel(const std::string &label) override; +#ifdef SUPPORT_GRAPHICS + /** + * @brief Set mission icon of this ability. + * + * @param icon the icon of this ability. + * @return Returns ERR_OK if success. + */ + ErrCode SetMissionIcon(const std::shared_ptr &icon) override; +#endif + void SetStageContext(const std::shared_ptr &stageContext); /** diff --git a/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp b/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp index 98b0d2f1626e8b66e01dc4285aafeca575fce41e..a4a6d6541db48dd56089b0c80798818284216aa4 100644 --- a/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp +++ b/frameworks/kits/ability/ability_runtime/src/ability_context_impl.cpp @@ -423,6 +423,18 @@ ErrCode AbilityContextImpl::SetMissionLabel(const std::string &label) return err; } +#ifdef SUPPORT_GRAPHICS +ErrCode AbilityContextImpl::SetMissionIcon(const std::shared_ptr &icon) +{ + HILOG_INFO("%{public}s begin.", __func__); + ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->SetMissionIcon(token_, icon); + if (err != ERR_OK) { + HILOG_ERROR("AbilityContextImpl::SetMissionIcon is failed %{public}d", err); + } + return err; +} +#endif + void AbilityContextImpl::RegisterAbilityCallback(std::weak_ptr abilityCallback) { HILOG_INFO("%{public}s called.", __func__); diff --git a/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h index 1a62e61740536f4933e6557e04c7fc7c171e1cc7..79231017e6679294fc3edc2137f7642ac6de865d 100644 --- a/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h @@ -241,6 +241,12 @@ public: return 0; } + int SetMissionIcon(const sptr &abilityToken, + const std::shared_ptr &icon) + { + return 0; + } + int SetMissionLabel(const sptr &abilityToken, const std::string &label) { return 0; diff --git a/frameworks/kits/ability/native/BUILD.gn b/frameworks/kits/ability/native/BUILD.gn index 6a113b4e07a6adba2a6d48bef4cfc1414946c06e..d70adb28a3b3df78f33c25392c9ee50fff0200a2 100644 --- a/frameworks/kits/ability/native/BUILD.gn +++ b/frameworks/kits/ability/native/BUILD.gn @@ -305,6 +305,7 @@ ohos_shared_library("abilitykit_native") { external_deps += [ "form_runtime:fmskit_native", "form_runtime:form_manager", + "multimedia_image_standard:image", "multimodalinput_base:libmmi-client", ] diff --git a/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h b/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h index 30a8e4827736a70a5c3fa47e7d1adbf0b5f7e0af..0a6b306bd8821a02d48f24f4858c1d2f561f2d03 100644 --- a/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h +++ b/frameworks/kits/ability/native/include/ability_runtime/js_ability_context.h @@ -52,6 +52,10 @@ public: static NativeValue* RestoreWindowStage(NativeEngine* engine, NativeCallbackInfo* info); static NativeValue* SetMissionLabel(NativeEngine* engine, NativeCallbackInfo* info); +#ifdef SUPPORT_GRAPHICS + static NativeValue* SetMissionIcon(NativeEngine* engine, NativeCallbackInfo* info); +#endif + static void ConfigurationUpdated(NativeEngine* engine, std::shared_ptr &jsContext, const std::shared_ptr &config); @@ -75,6 +79,10 @@ private: NativeValue* OnRestoreWindowStage(NativeEngine& engine, NativeCallbackInfo& info); NativeValue* OnSetMissionLabel(NativeEngine& engine, NativeCallbackInfo& info); +#ifdef SUPPORT_GRAPHICS + NativeValue* OnSetMissionIcon(NativeEngine& engine, NativeCallbackInfo& info); +#endif + static bool UnWrapWant(NativeEngine& engine, NativeValue* argv, AAFwk::Want& want); static NativeValue* WrapWant(NativeEngine& engine, const AAFwk::Want& want); static bool UnWrapAbilityResult(NativeEngine& engine, NativeValue* argv, int& resultCode, AAFwk::Want& want); diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp index 1dc7e8496f876b7b269055c94580929ceae14ffc..6b93f780e269ba2f4834176235d45e6fa3c8c81b 100755 --- a/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_ability_context.cpp @@ -31,6 +31,10 @@ #include "want.h" #include "event_handler.h" +#ifdef SUPPORT_GRAPHICS +#include "pixel_map_napi.h" +#endif + namespace OHOS { namespace AbilityRuntime { constexpr int32_t INDEX_TWO = 2; @@ -39,6 +43,7 @@ constexpr size_t ARGC_ONE = 1; constexpr size_t ARGC_TWO = 2; constexpr size_t ARGC_THREE = 3; constexpr int32_t ERROR_CODE_ONE = 1; +constexpr int32_t ERR_NOTOK = -1; class StartAbilityByCallParameters { public: @@ -135,6 +140,14 @@ NativeValue* JsAbilityContext::SetMissionLabel(NativeEngine* engine, NativeCallb return (me != nullptr) ? me->OnSetMissionLabel(*engine, *info) : nullptr; } +#ifdef SUPPORT_GRAPHICS +NativeValue* JsAbilityContext::SetMissionIcon(NativeEngine* engine, NativeCallbackInfo* info) +{ + JsAbilityContext* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnSetMissionIcon(*engine, *info) : nullptr; +} +#endif + NativeValue* JsAbilityContext::OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info) { HILOG_INFO("OnStartAbility is called"); @@ -768,14 +781,20 @@ NativeValue* JsAbilityContext::OnSetMissionLabel(NativeEngine& engine, NativeCal return engine.CreateUndefined(); } + int32_t errorCode = 0; std::string label; if (!ConvertFromJsValue(engine, info.argv[0], label)) { HILOG_ERROR("OnSetMissionLabel, parse label failed."); - return engine.CreateUndefined(); + errorCode = ERR_NOTOK; } AsyncTask::CompleteCallback complete = - [weak = context_, label](NativeEngine& engine, AsyncTask& task, int32_t status) { + [weak = context_, label, errorCode](NativeEngine& engine, AsyncTask& task, int32_t status) { + if (errorCode != 0) { + task.Reject(engine, CreateJsError(engine, errorCode, "Invalidate params.")); + return; + } + auto context = weak.lock(); if (!context) { HILOG_WARN("context is released"); @@ -798,6 +817,53 @@ NativeValue* JsAbilityContext::OnSetMissionLabel(NativeEngine& engine, NativeCal return result; } +#ifdef SUPPORT_GRAPHICS +NativeValue* JsAbilityContext::OnSetMissionIcon(NativeEngine& engine, NativeCallbackInfo& info) +{ + HILOG_INFO("OnSetMissionIcon is called, argc = %{public}d", static_cast(info.argc)); + if (info.argc < ARGC_ONE) { + HILOG_ERROR("OnSetMissionIcon, Not enough params"); + return engine.CreateUndefined(); + } + + int32_t errorCode = 0; + auto icon = OHOS::Media::PixelMapNapi::GetPixelMap(reinterpret_cast(&engine), + reinterpret_cast(info.argv[0])); + if (!icon) { + HILOG_ERROR("OnSetMissionIcon, parse icon failed."); + errorCode = ERR_NOTOK; + } + + AsyncTask::CompleteCallback complete = + [weak = context_, icon, errorCode](NativeEngine& engine, AsyncTask& task, int32_t status) { + if (errorCode != 0) { + task.Reject(engine, CreateJsError(engine, errorCode, "Invalidate params.")); + return; + } + + auto context = weak.lock(); + if (!context) { + HILOG_WARN("context is released when set mission icon"); + task.Reject(engine, CreateJsError(engine, -1, "Context is released")); + return; + } + + auto errcode = context->SetMissionIcon(icon); + if (errcode == 0) { + task.Resolve(engine, engine.CreateUndefined()); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "SetMissionIcon failed.")); + } + }; + + NativeValue* lastParam = (info.argc == ARGC_ONE) ? nullptr : info.argv[1]; + NativeValue* result = nullptr; + AsyncTask::Schedule( + engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; +} +#endif + bool JsAbilityContext::UnWrapWant(NativeEngine& engine, NativeValue* argv, AAFwk::Want& want) { if (argv == nullptr) { @@ -945,6 +1011,10 @@ NativeValue* CreateJsAbilityContext(NativeEngine& engine, std::shared_ptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD1(GetMissionIdByToken, int32_t(const sptr &token)); 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 3c21ceecdabdbb10773fee85fae9f7d8609ee34a..11cb2f50d551d3c9cabd8650daca97a1bb0ed3ad 100644 --- a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h @@ -137,6 +137,8 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); 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 ad92b9a1efebbe61d9d9cc72960327c5bdfbbfd4..dfee755d13a6f350ea954cd1285e2f5d29f3b361 100644 --- a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h @@ -137,6 +137,8 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_client.h b/interfaces/innerkits/ability_manager/include/ability_manager_client.h index cd8a85d7a900c25a58710a5f972a626e55e34a2c..438751e12a3f84d80c8f3c0a02dbd43fea1ca470 100644 --- a/interfaces/innerkits/ability_manager/include/ability_manager_client.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_client.h @@ -709,6 +709,18 @@ public: */ ErrCode SetMissionLabel(const sptr &abilityToken, const std::string &label); +#ifdef SUPPORT_GRAPHICS + /** + * Set mission icon of this ability. + * + * @param abilityToken Indidate token of ability. + * @param icon Indidate the icon showed of the ability in recent missions. + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode SetMissionIcon(const sptr &abilityToken, + const std::shared_ptr &icon); +#endif + /** * @brief start user test. * @param want the want of the ability user test to start. diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h index 63ce3566ef5f105a12da6952873f915dcc47748d..44c89231a94201e1d76cd4d09a93e02d87308742 100644 --- a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h @@ -604,6 +604,11 @@ public: virtual int SetMissionLabel(const sptr &abilityToken, const std::string &label) = 0; +#ifdef SUPPORT_GRAPHICS + virtual int SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) = 0; +#endif + virtual int GetAbilityRunningInfos(std::vector &info) = 0; virtual int GetExtensionRunningInfos(int upperLimit, std::vector &info) = 0; @@ -889,6 +894,9 @@ public: // ipc for get mission id by ability token (57) GET_MISSION_ID_BY_ABILITY_TOKEN, + // ipc id for set mission icon (58) + SET_MISSION_ICON, + // ipc id 1001-2000 for DMS // ipc id for starting ability (1001) START_ABILITY = 1001, @@ -942,7 +950,7 @@ public: GET_APP_MEMORY_SIZE, IS_RAM_CONSTRAINED_DEVICE, - + GET_ABILITY_RUNNING_INFO, GET_EXTENSION_RUNNING_INFO, diff --git a/interfaces/innerkits/ability_manager/include/mission_listener_interface.h b/interfaces/innerkits/ability_manager/include/mission_listener_interface.h index b9af6db937bd87731af480463dc624fce904200d..b620c9fae1f5104ac7b799081f808e219caae914 100644 --- a/interfaces/innerkits/ability_manager/include/mission_listener_interface.h +++ b/interfaces/innerkits/ability_manager/include/mission_listener_interface.h @@ -17,6 +17,9 @@ #define OHOS_AAFWK_MISSION_LISTENER_INTERFACE_H #include "iremote_broker.h" +#ifdef SUPPORT_GRAPHICS +#include "pixel_map.h" +#endif namespace OHOS { namespace AAFwk { @@ -56,6 +59,16 @@ public: */ virtual void OnMissionMovedToFront(int32_t missionId) = 0; +#ifdef SUPPORT_GRAPHICS + /** + * @brief Called when a mission has changed it's icon. + * + * @param missionId, mission Id. + * @param icon, mission icon. + */ + virtual void OnMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon) = 0; +#endif + enum MissionListenerCmd { // ipc id for OnMissionCreated ON_MISSION_CREATED = 0, @@ -69,6 +82,9 @@ public: // ipc id for OnMissionMovedToFront ON_MISSION_MOVED_TO_FRONT, + // ipc id for OnMissionIconUpdated + ON_MISSION_ICON_UPDATED, + // maximum of enum MISSION_LINSTENER_CMD_MAX }; diff --git a/interfaces/innerkits/ability_manager/include/mission_listener_proxy.h b/interfaces/innerkits/ability_manager/include/mission_listener_proxy.h index 11e312a4dd6d32211f4c5067957470e71acbd3e3..190f2d859319aa58546cd478640586eed793866f 100644 --- a/interfaces/innerkits/ability_manager/include/mission_listener_proxy.h +++ b/interfaces/innerkits/ability_manager/include/mission_listener_proxy.h @@ -58,6 +58,16 @@ public: */ virtual void OnMissionMovedToFront(int32_t missionId) override; +#ifdef SUPPORT_GRAPHICS + /** + * @brief Called when a mission has changed it's icon. + * + * @param missionId, mission Id. + * @param icon, mission icon. + */ + virtual void OnMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon) override; +#endif + private: void SendRequestCommon(int32_t missionId, IMissionListener::MissionListenerCmd cmd); diff --git a/interfaces/innerkits/ability_manager/include/mission_listener_stub.h b/interfaces/innerkits/ability_manager/include/mission_listener_stub.h index eb423dc78a1c281b12feccd02326b44946c113f8..587c7d417db59b27caf7ccf18673e252381f4086 100644 --- a/interfaces/innerkits/ability_manager/include/mission_listener_stub.h +++ b/interfaces/innerkits/ability_manager/include/mission_listener_stub.h @@ -44,6 +44,7 @@ private: int OnMissionDestroyedInner(MessageParcel &data, MessageParcel &reply); int OnMissionSnapshotChangedInner(MessageParcel &data, MessageParcel &reply); int OnMissionMovedToFrontInner(MessageParcel &data, MessageParcel &reply); + int OnMissionIconUpdatedInner(MessageParcel &data, MessageParcel &reply); using MissionListenerFunc = int (MissionListenerStub::*)(MessageParcel &data, MessageParcel &reply); std::vector vecMemberFunc_; diff --git a/interfaces/innerkits/ability_manager/include/mission_snapshot.h b/interfaces/innerkits/ability_manager/include/mission_snapshot.h index 5c6e52699a3ddd5c393a56f99752454a76c15b7d..320296c5921b6c1f8fa9d8094849d7c07fa885f9 100644 --- a/interfaces/innerkits/ability_manager/include/mission_snapshot.h +++ b/interfaces/innerkits/ability_manager/include/mission_snapshot.h @@ -21,7 +21,7 @@ #include "parcel.h" #include "element_name.h" #ifdef SUPPORT_GRAPHICS -#include "foundation/multimedia/image_standard/interfaces/innerkits/include/pixel_map.h" +#include "pixel_map.h" #endif namespace OHOS { @@ -42,7 +42,7 @@ struct MissionPixelMap : public Parcelable { struct MissionSnapshot : public Parcelable { AppExecFwk::ElementName topAbility; #ifdef SUPPORT_GRAPHICS - std::shared_ptr snapshot; + std::shared_ptr snapshot; #endif bool ReadFromParcel(Parcel &parcel); virtual bool Marshalling(Parcel &parcel) const override; diff --git a/interfaces/innerkits/ability_manager/include/snapshot.h b/interfaces/innerkits/ability_manager/include/snapshot.h index 65a8f0ca30046ea97263d6dbfa800eb576aa51c5..0110a8a5fcda89badc83ab92413e3c3cb903f81d 100644 --- a/interfaces/innerkits/ability_manager/include/snapshot.h +++ b/interfaces/innerkits/ability_manager/include/snapshot.h @@ -18,12 +18,11 @@ #include -namespace OHOS { #ifdef SUPPORT_GRAPHICS -namespace Media { -class PixelMap; -} +#include "pixel_map.h" #endif + +namespace OHOS { namespace AAFwk { /** * @class Snapshot @@ -34,16 +33,16 @@ public: Snapshot() = default; ~Snapshot() = default; #ifdef SUPPORT_GRAPHICS - const std::shared_ptr& GetPixelMap() const + const std::shared_ptr& GetPixelMap() const { return pixelMap_; } - void SetPixelMap(const std::shared_ptr& pixelMap) + void SetPixelMap(const std::shared_ptr& pixelMap) { pixelMap_ = pixelMap; } private: - std::shared_ptr pixelMap_ = nullptr; + std::shared_ptr pixelMap_ = nullptr; #endif }; diff --git a/interfaces/kits/napi/aafwk/ability_context/ability_context.js b/interfaces/kits/napi/aafwk/ability_context/ability_context.js index 272c9e4e6f8deb1e48646bf60eb8184ffa7c956f..4da485872b3c5be8c997b73109ac5cb96b3778e6 100644 --- a/interfaces/kits/napi/aafwk/ability_context/ability_context.js +++ b/interfaces/kits/napi/aafwk/ability_context/ability_context.js @@ -87,6 +87,14 @@ class AbilityContext extends Context { restoreWindowStage(contentStorage) { return this.__context_impl__.restoreWindowStage(contentStorage) } + + setMissionLabel(label, callback) { + return this.__context_impl__.setMissionLabel(label, callback) + } + + setMissionIcon(icon, callback) { + return this.__context_impl__.setMissionIcon(icon, callback) + } } export default AbilityContext \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.cpp b/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.cpp index c9b2d6470ea09d3226186e3a4b5b07ad4b9ad2f6..94109a1daca913916a58e55e4ee8e5fd9dea66e3 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.cpp +++ b/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.cpp @@ -18,6 +18,10 @@ #include "hilog_wrapper.h" #include "js_runtime_utils.h" +#ifdef SUPPORT_GRAPHICS +#include "pixel_map_napi.h" +#endif + namespace OHOS { namespace AbilityRuntime { void JsMissionListener::OnMissionCreated(int32_t missionId) @@ -40,6 +44,33 @@ void JsMissionListener::OnMissionMovedToFront(int32_t missionId) CallJsMethod("onMissionMovedToFront", missionId); } +#ifdef SUPPORT_GRAPHICS +void JsMissionListener::OnMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon) +{ + HILOG_INFO("OnMissionIconUpdated, missionId = %{public}d", missionId); + if (engine_ == nullptr) { + HILOG_ERROR("engine_ is nullptr"); + return; + } + + if (missionId <= 0 || !icon) { + HILOG_ERROR("missionId or icon is invalid, missionId:%{public}d", missionId); + return; + } + + // js callback must run in js thread + std::unique_ptr complete = std::make_unique + ([jsMissionListener = this, missionId, icon](NativeEngine &engine, AsyncTask &task, int32_t status) { + if (jsMissionListener) { + jsMissionListener->CallJsMissionIconUpdated(missionId, icon); + } + }); + NativeReference* callback = nullptr; + std::unique_ptr execute = nullptr; + AsyncTask::Schedule(*engine_, std::make_unique(callback, std::move(execute), std::move(complete))); +} +#endif + void JsMissionListener::AddJsListenerObject(int32_t listenerId, NativeValue* jsListenerObject) { jsListenerObjectMap_.emplace( @@ -101,5 +132,37 @@ void JsMissionListener::CallJsMethodInner(const std::string &methodName, int32_t engine_->CallFunction(value, method, argv, ArraySize(argv)); } } + +#ifdef SUPPORT_GRAPHICS +void JsMissionListener::CallJsMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon) +{ + if (engine_ == nullptr) { + HILOG_ERROR("engine_ is nullptr, not call js mission updated."); + return; + } + + NativeValue* nativeMissionId = CreateJsValue(*engine_, missionId); + auto nativeIcon = reinterpret_cast( + Media::PixelMapNapi::CreatePixelMap(reinterpret_cast(engine_), icon)); + + auto tmpMap = jsListenerObjectMap_; + for (auto &item : tmpMap) { + NativeValue* value = (item.second)->Get(); + NativeObject* listenerObj = ConvertNativeValueTo(value); + if (listenerObj == nullptr) { + HILOG_ERROR("Failed to get js object"); + continue; + } + NativeValue* method = listenerObj->GetProperty("onMissionIconUpdated"); + if (method == nullptr || method->TypeOf() == NATIVE_UNDEFINED) { + HILOG_ERROR("Failed to get onMissionIconUpdated method from object"); + continue; + } + + NativeValue* argv[] = { nativeMissionId, nativeIcon }; + engine_->CallFunction(value, method, argv, ArraySize(argv)); + } +} +#endif } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.h b/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.h index 4b99c4dd93a0d382b54e74f538aa83264d7e98ed..2294a36a9a92ffcd0d4189774bff898ec92eb85b 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.h +++ b/interfaces/kits/napi/aafwk/mission_manager/js_mission_listener.h @@ -34,6 +34,11 @@ public: void OnMissionDestroyed(int32_t missionId) override; void OnMissionSnapshotChanged(int32_t missionId) override; void OnMissionMovedToFront(int32_t missionId) override; + +#ifdef SUPPORT_GRAPHICS + void OnMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon) override; +#endif + void AddJsListenerObject(int32_t listenerId, NativeValue* jsListenerObject); bool RemoveJsListenerObject(int32_t listenerId); bool IsEmpty(); @@ -42,6 +47,10 @@ private: void CallJsMethod(const std::string &methodName, int32_t missionId); void CallJsMethodInner(const std::string &methodName, int32_t missionId); +#ifdef SUPPORT_GRAPHICS + void CallJsMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon); +#endif + NativeEngine* engine_ = nullptr; std::map> jsListenerObjectMap_; std::shared_ptr mainHandler_; diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 75c42dc224351e87657a96c7f5772a5f38b2a300..8785691ff331da54cd42788d990f5de348b4b5a6 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -576,6 +576,11 @@ public: virtual int SetMissionLabel(const sptr &abilityToken, const std::string &label) override; +#ifdef SUPPORT_GRAPHICS + virtual int SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) override; +#endif + virtual int GetAbilityRunningInfos(std::vector &info) override; virtual int GetExtensionRunningInfos(int upperLimit, std::vector &info) override; diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 6456a57bc6981b7f1ec989009a26101b7fc2bab4..2702f88083c44dc874d4c0b5992966b39ad15a17 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -771,6 +771,11 @@ public: virtual int SetMissionLabel(const sptr &abilityToken, const std::string &label) override; +#ifdef SUPPORT_GRAPHICS + virtual int SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) override; +#endif + void ClearUserData(int32_t userId); virtual int RegisterSnapshotHandler(const sptr& handler) override; diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index d7e748889473a99ef7ce5b8c000dbf7c3500b122..16b763ffc1760c4c0b21a8a7b38cd0dd821c0a6c 100644 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -150,6 +150,7 @@ private: int StartUserInner(MessageParcel &data, MessageParcel &reply); int StopUserInner(MessageParcel &data, MessageParcel &reply); int SetMissionLabelInner(MessageParcel &data, MessageParcel &reply); + int SetMissionIconInner(MessageParcel &data, MessageParcel &reply); int GetAbilityRunningInfosInner(MessageParcel &data, MessageParcel &reply); int GetExtensionRunningInfosInner(MessageParcel &data, MessageParcel &reply); int GetProcessRunningInfosInner(MessageParcel &data, MessageParcel &reply); diff --git a/services/abilitymgr/include/mission_list_manager.h b/services/abilitymgr/include/mission_list_manager.h index b6e3b5b2c65a53c9a093ae636d12d36703bdd618..0ef25ea7bdb61a7f1c8ac968d38f088b9f8eb446 100644 --- a/services/abilitymgr/include/mission_list_manager.h +++ b/services/abilitymgr/include/mission_list_manager.h @@ -261,6 +261,17 @@ public: */ int SetMissionLabel(const sptr &abilityToken, const std::string &label); +#ifdef SUPPORT_GRAPHICS + /** + * Set mission icon of this ability. + * + * @param token target ability token. + * @param icon target label. + * @return Retun 0 if success. + */ + int SetMissionIcon(const sptr &token, const std::shared_ptr &icon); +#endif + /** * @brief dump all abilities * diff --git a/services/abilitymgr/include/mission_listener_controller.h b/services/abilitymgr/include/mission_listener_controller.h index ee003f2b3781315b4b6cd4cb43e120a6206d9d43..028f363e17667a68c23f4d398b3629dafe89a958 100644 --- a/services/abilitymgr/include/mission_listener_controller.h +++ b/services/abilitymgr/include/mission_listener_controller.h @@ -82,12 +82,32 @@ public: */ void NotifyMissionMovedToFront(int32_t missionId); +#ifdef SUPPORT_GRAPHICS + /** + * notify listeners that mission icon has changed. + * + * @param missionId target mission id. + * @param icon mission icon. + */ + void NotifyMissionIconChanged(int32_t missionId, const std::shared_ptr &icon); +#endif + void HandleUnInstallApp(const std::list &missions); private: - void NotifyListeners(int32_t missionId, IMissionListener::MissionListenerCmd cmd); void OnListenerDied(const wptr &remote); + template + void CallListeners(F func, Args&&... args) + { + std::lock_guard guard(listenerLock_); + for (auto listener : missionListeners_) { + if (listener) { + (listener->*func)(std::forward(args)...); + } + } + } + class ListenerDeathRecipient : public IRemoteObject::DeathRecipient { public: using ListenerDiedHandler = std::function &)>; @@ -104,9 +124,6 @@ private: std::shared_ptr handler_; std::vector> missionListeners_; sptr listenerDeathRecipient_; - - using ListenerFun = void (IMissionListener::*)(int); - std::unordered_map listenerFunMap_; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index 06663fe50e5c8142525520c48b86655837289479..534934f4a3c31f3f3760acb0e3c14de50e69c487 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -961,6 +961,17 @@ ErrCode AbilityManagerClient::SetMissionLabel(const sptr &token, return abms->SetMissionLabel(token, label); } +ErrCode AbilityManagerClient::SetMissionIcon( + const sptr &abilityToken, const std::shared_ptr &icon) +{ + CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); + auto abms = iface_cast(remoteObject_); + if (abms == nullptr) { + return ABILITY_SERVICE_NOT_CONNECTED; + } + return abms->SetMissionIcon(abilityToken, icon); +} + ErrCode AbilityManagerClient::DoAbilityForeground(const sptr &token, uint32_t flag) { CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index c651a2347bb3931d7a5d4011e94ad071abfebc99..92f6b22ddbd3a7a59915ae289c81ba13cbda93ea 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -2131,6 +2131,40 @@ int AbilityManagerProxy::SetMissionLabel(const sptr &token, const return reply.ReadInt32(); } +#ifdef SUPPORT_GRAPHICS +int AbilityManagerProxy::SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) +{ + if (!token || !icon) { + HILOG_ERROR("SetMissionIcon abilitytoken or icon is invalid."); + return ERR_INVALID_VALUE; + } + + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteRemoteObject(token)) { + HILOG_ERROR("SetMissionIcon write token failed."); + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(icon.get())) { + HILOG_ERROR("SetMissionIcon write icon failed."); + return ERR_INVALID_VALUE; + } + + auto error = Remote()->SendRequest(IAbilityManager::SET_MISSION_ICON, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("SetMissionIcon Send request error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} +#endif + int AbilityManagerProxy::GetAbilityRunningInfos(std::vector &info) { MessageParcel data; diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 2c98acdedf562f1bc3f432459b59c11434ac5c8b..60491d338971a6830fcc9d4b991611a6d2cd2cda 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3635,6 +3635,35 @@ int AbilityManagerService::SetMissionLabel(const sptr &token, con return 0; } +#ifdef SUPPORT_GRAPHICS +int AbilityManagerService::SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) +{ + HILOG_DEBUG("%{public}s", __func__); + auto abilityRecord = Token::GetAbilityRecordByToken(token); + if (!abilityRecord) { + HILOG_ERROR("no such ability record"); + return -1; + } + + auto callingUid = IPCSkeleton::GetCallingUid(); + auto recordUid = abilityRecord->GetUid(); + if (callingUid != recordUid) { + HILOG_ERROR("not self, callingUid:%{public}d, recordUid:%{public}d", callingUid, recordUid); + return -1; + } + + auto userId = callingUid / BASE_USER_RANGE; + auto missionListManager = GetListManagerByUserId(userId); + if (!missionListManager) { + HILOG_ERROR("failed to find mission list manager."); + return -1; + } + + return missionListManager->SetMissionIcon(token, icon); +} +#endif + int AbilityManagerService::StartUser(int userId) { HILOG_DEBUG("%{public}s, userId:%{public}d", __func__, userId); diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index b9fbc7c9a17b39c0e400e7a586653613e18c2b79..15bb8fb4283ac5ec16b2aa13f5b6ad02590769b1 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -151,6 +151,7 @@ void AbilityManagerStub::ThirdStepInit() requestFuncMap_[DO_ABILITY_FOREGROUND] = &AbilityManagerStub::DoAbilityForegroundInner; requestFuncMap_[DO_ABILITY_BACKGROUND] = &AbilityManagerStub::DoAbilityBackgroundInner; requestFuncMap_[GET_MISSION_ID_BY_ABILITY_TOKEN] = &AbilityManagerStub::GetMissionIdByTokenInner; + requestFuncMap_[SET_MISSION_ICON] = &AbilityManagerStub::SetMissionIconInner; } int AbilityManagerStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) @@ -1272,6 +1273,33 @@ int AbilityManagerStub::SetMissionLabelInner(MessageParcel &data, MessageParcel return NO_ERROR; } +int AbilityManagerStub::SetMissionIconInner(MessageParcel &data, MessageParcel &reply) +{ +#ifdef SUPPORT_GRAPHICS + sptr token = data.ReadRemoteObject(); + if (!token) { + HILOG_ERROR("SetMissionIconInner read ability token failed."); + return ERR_NULL_OBJECT; + } + + std::shared_ptr icon(data.ReadParcelable()); + if (!icon) { + HILOG_ERROR("SetMissionIconInner read icon failed."); + return ERR_NULL_OBJECT; + } + + int result = SetMissionIcon(token, icon); + if (!reply.WriteInt32(result)) { + HILOG_ERROR("SetMissionIcon failed."); + return ERR_INVALID_VALUE; + } + return NO_ERROR; +#else + HILOG_ERROR("do not support SetMissionIcon."); + return ERR_INVALID_VALUE; +#endif +} + int AbilityManagerStub::GetAbilityRunningInfosInner(MessageParcel &data, MessageParcel &reply) { std::vector abilityRunningInfos; diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index 0fc7af56596edb4dc465d0effde100b1b5eed238..388bda7f3769ffd35ad4f9ff4ad87b077355e24b 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -1862,6 +1862,29 @@ int MissionListManager::SetMissionLabel(const sptr &token, const return DelayedSingleton::GetInstance()->UpdateMissionLabel(missionId, label); } +#ifdef SUPPORT_GRAPHICS +int MissionListManager::SetMissionIcon(const sptr &token, const std::shared_ptr &icon) +{ + if (!token) { + HILOG_INFO("SetMissionIcon token is nullptr."); + return -1; + } + + std::lock_guard guard(managerLock_); + auto missionId = GetMissionIdByAbilityToken(token); + if (missionId <= 0) { + HILOG_INFO("SetMissionIcon find mission failed."); + return -1; + } + + if (listenerController_) { + listenerController_->NotifyMissionIconChanged(missionId, icon); + } + + return 0; +} +#endif + void MissionListManager::Dump(std::vector &info) { std::lock_guard guard(managerLock_); diff --git a/services/abilitymgr/src/mission_listener_controller.cpp b/services/abilitymgr/src/mission_listener_controller.cpp index c53591d8e05f79d0d4d098b1629a8ebc85358562..7d6a29b420532ca6ca57c45c01c9fb054df38352 100644 --- a/services/abilitymgr/src/mission_listener_controller.cpp +++ b/services/abilitymgr/src/mission_listener_controller.cpp @@ -27,10 +27,6 @@ using Cmd = IMissionListener::MissionListenerCmd; MissionListenerController::MissionListenerController() { - listenerFunMap_[Cmd::ON_MISSION_CREATED] = &IMissionListener::OnMissionCreated; - listenerFunMap_[Cmd::ON_MISSION_DESTROYED] = &IMissionListener::OnMissionDestroyed; - listenerFunMap_[Cmd::ON_MISSION_SNAPSHOT_CHANGED] = &IMissionListener::OnMissionSnapshotChanged; - listenerFunMap_[Cmd::ON_MISSION_MOVED_TO_FRONT] = &IMissionListener::OnMissionMovedToFront; } MissionListenerController::~MissionListenerController() @@ -111,7 +107,8 @@ void MissionListenerController::NotifyMissionCreated(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionCreated failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_CREATED); + HILOG_INFO("notify listeners mission is created, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionCreated, missionId); }; handler_->PostTask(task); } @@ -128,7 +125,8 @@ void MissionListenerController::NotifyMissionDestroyed(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionDestroyed failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_DESTROYED); + HILOG_INFO("notify listeners mission is destroyed, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionDestroyed, missionId); }; handler_->PostTask(task); } @@ -151,7 +149,7 @@ void MissionListenerController::HandleUnInstallApp(const std::list &mis return; } for (auto id : missions) { - self->NotifyListeners(id, Cmd::ON_MISSION_DESTROYED); + self->CallListeners(&IMissionListener::OnMissionDestroyed, id); } }; handler_->PostTask(task); @@ -171,7 +169,8 @@ void MissionListenerController::NotifyMissionSnapshotChanged(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionSnapshotChanged failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_SNAPSHOT_CHANGED); + HILOG_INFO("notify listeners mission snapshot changed, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionSnapshotChanged, missionId); }; handler_->PostTask(task); } @@ -189,33 +188,33 @@ void MissionListenerController::NotifyMissionMovedToFront(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionSnapshotChanged failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_MOVED_TO_FRONT); + HILOG_INFO("notify listeners mission is moved to front, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionMovedToFront, missionId); }; handler_->PostTask(task); } -void MissionListenerController::NotifyListeners(int32_t missionId, IMissionListener::MissionListenerCmd cmd) +#ifdef SUPPORT_GRAPHICS +void MissionListenerController::NotifyMissionIconChanged(int32_t missionId, + const std::shared_ptr &icon) { - HILOG_INFO("notify mission listeners begin, cmd:%{public}d", cmd); - auto it = listenerFunMap_.find(cmd); - if (it == listenerFunMap_.end()) { - HILOG_ERROR("invalid cmd:%{public}d", cmd); - return; - } - auto fun = it->second; - if (!fun) { - HILOG_ERROR("find fun failed, cmd:%{public}d", cmd); + if (!handler_) { + HILOG_ERROR("handler not init when notify mission icon changed"); return; } - std::lock_guard guard(listenerLock_); - for (auto listener : missionListeners_) { - if (listener) { - (listener->*fun)(missionId); + auto task = [weak = weak_from_this(), missionId, icon]() { + auto self = weak.lock(); + if (self == nullptr) { + HILOG_ERROR("self is nullptr, NotifyMissionIconChanged failed."); + return; } - } - HILOG_INFO("notify mission listeners end, cmd:%{public}d", cmd); + HILOG_INFO("notify listeners mission icon has changed, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionIconUpdated, missionId, icon); + }; + handler_->PostTask(task); } +#endif void MissionListenerController::OnListenerDied(const wptr &remote) { diff --git a/services/abilitymgr/src/mission_listener_proxy.cpp b/services/abilitymgr/src/mission_listener_proxy.cpp index 93f4d6fa5d2b06c05df690f6e337e4f00d7c0501..79d5606d827a2811a5a65d47accc07d9a7f978ff 100644 --- a/services/abilitymgr/src/mission_listener_proxy.cpp +++ b/services/abilitymgr/src/mission_listener_proxy.cpp @@ -41,6 +41,42 @@ void MissionListenerProxy::OnMissionMovedToFront(int32_t missionId) SendRequestCommon(missionId, IMissionListener::ON_MISSION_MOVED_TO_FRONT); } +#ifdef SUPPORT_GRAPHICS +void MissionListenerProxy::OnMissionIconUpdated(int32_t missionId, const std::shared_ptr &icon) +{ + if (!icon) { + HILOG_ERROR("invalid mission icon."); + return; + } + + MessageParcel data; + MessageParcel reply; + MessageOption option; + + HILOG_INFO("mission_listener_proxy, OnMissionIconUpdated,missionId:%{public}d", missionId); + if (!data.WriteInterfaceToken(IMissionListener::GetDescriptor())) { + HILOG_ERROR("Write interface token failed when proxy call OnMissionIconUpdated."); + return; + } + + if (!data.WriteInt32(missionId)) { + HILOG_ERROR("Write missionId failed."); + return; + } + + if (!data.WriteParcelable(icon.get())) { + HILOG_ERROR("write icon failed."); + return; + } + + int error = Remote()->SendRequest(IMissionListener::ON_MISSION_ICON_UPDATED, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("SendRequest icon updated fail, error: %{public}d", error); + return; + } +} +#endif + void MissionListenerProxy::SendRequestCommon(int32_t missionId, IMissionListener::MissionListenerCmd cmd) { MessageParcel data; diff --git a/services/abilitymgr/src/mission_listener_stub.cpp b/services/abilitymgr/src/mission_listener_stub.cpp index 390782fb7425d7ee37df5be8d5f2572be4ff4558..6d258aa4cd590b0bdb2799ae2840b0f8af0601bc 100644 --- a/services/abilitymgr/src/mission_listener_stub.cpp +++ b/services/abilitymgr/src/mission_listener_stub.cpp @@ -28,6 +28,7 @@ MissionListenerStub::MissionListenerStub() vecMemberFunc_[ON_MISSION_DESTROYED] = &MissionListenerStub::OnMissionDestroyedInner; vecMemberFunc_[ON_MISSION_SNAPSHOT_CHANGED] = &MissionListenerStub::OnMissionSnapshotChangedInner; vecMemberFunc_[ON_MISSION_MOVED_TO_FRONT] = &MissionListenerStub::OnMissionMovedToFrontInner; + vecMemberFunc_[ON_MISSION_ICON_UPDATED] = &MissionListenerStub::OnMissionIconUpdatedInner; } int MissionListenerStub::OnMissionCreatedInner(MessageParcel &data, MessageParcel &reply) @@ -58,6 +59,19 @@ int MissionListenerStub::OnMissionMovedToFrontInner(MessageParcel &data, Message return NO_ERROR; } +int MissionListenerStub::OnMissionIconUpdatedInner(MessageParcel &data, MessageParcel &reply) +{ +#ifdef SUPPORT_GRAPHICS + auto missionId = data.ReadInt32(); + std::shared_ptr icon(data.ReadParcelable()); + OnMissionIconUpdated(missionId, icon); + return NO_ERROR; +#else + HILOG_ERROR("do not support OnMissionIconUpdated"); + return ERR_INVALID_STATE; +#endif +} + int MissionListenerStub::OnRemoteRequest( uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h b/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h index d0d6822a9a05ad6d2883febe2c9af528f7f52837..49bc4b4b638ff3fd535903e9f9ce80a40d0de5c5 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h @@ -410,6 +410,8 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); 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 bc045ed4edd82f6025ea1daeb1593decd4424036..936bc34ed9e5e2790ba0bad3fa953039d8e36158 100644 --- 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 @@ -410,6 +410,8 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); 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 d7af3387acfb11d6c543eca2f16fad9f3138808b..a4e1979c7dd3a628a8ba7e92e37138cfa78b73d3 100644 --- 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 @@ -48,6 +48,8 @@ public: MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, int32_t result)); MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, 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 99350177f83aa70a91506558155b2f9ca5272095..5b68feda30224f6092e691bc5653d09dcdbd29ab 100644 --- 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 @@ -105,6 +105,8 @@ public: MOCK_METHOD1(TerminateAbilityTest, void(int id)); MOCK_METHOD1(MoveMissionToEnd, int(int id)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); diff --git a/services/formmgr/test/mock/include/mock_ability_manager.h b/services/formmgr/test/mock/include/mock_ability_manager.h index e3f85d151c6c740e63b495bd8ae33dd6884c4d26..6fccb49327cd5184b9e325280201bb4b9015ffbe 100644 --- a/services/formmgr/test/mock/include/mock_ability_manager.h +++ b/services/formmgr/test/mock/include/mock_ability_manager.h @@ -327,6 +327,12 @@ public: return 0; } + virtual int SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) override + { + return 0; + } + virtual int StartUserTest(const Want &want, const sptr &observer) override { return 0; @@ -751,6 +757,12 @@ public: return 0; } + virtual int SetMissionIcon(const sptr &token, + const std::shared_ptr &icon) override + { + return 0; + } + virtual int StartUserTest(const Want &want, const sptr &observer) override { return 0; diff --git a/services/test/mock/include/appmgr/mock_ability_mgr_host.h b/services/test/mock/include/appmgr/mock_ability_mgr_host.h index 5a080637db4b4253831e6572b0837dd0603580d0..d452a72821b632d3adeca0bdae78292c088bc1bb 100644 --- a/services/test/mock/include/appmgr/mock_ability_mgr_host.h +++ b/services/test/mock/include/appmgr/mock_ability_mgr_host.h @@ -401,7 +401,7 @@ public: { return 0; } - + virtual int ForceTimeoutForTest(const std::string &abilityName, const std::string &state) override { return 0; diff --git a/services/test/mock/include/mock_ability_mgr_service.h b/services/test/mock/include/mock_ability_mgr_service.h index fd35fee42cf845f3642ffdd7780913aecefa422b..bdd45984108ae1a06bcba0445411eac07aee5cf3 100644 --- a/services/test/mock/include/mock_ability_mgr_service.h +++ b/services/test/mock/include/mock_ability_mgr_service.h @@ -119,6 +119,8 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD1(ClearUpApplicationData, int(const std::string &)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h index 1e7275d9eb7f7b3c37aa3be88fafe84ee22641f4..c2ed76f2aa567982d02b23c81e71b93f5758e484 100644 --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -141,6 +141,8 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(MoveMissionToFront, int(int32_t missionId, const StartOptions &startOptions)); MOCK_METHOD2(SetMissionLabel, int(const sptr &token, const std::string &label)); + MOCK_METHOD2(SetMissionIcon, int(const sptr &token, + const std::shared_ptr &icon)); MOCK_METHOD1(ClearUpApplicationData, int(const std::string &)); MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info));