From 181abc524a15f6a485a384ef27fe442da7e63983 Mon Sep 17 00:00:00 2001 From: nzy Date: Thu, 16 Jan 2025 17:26:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3SetSess?= =?UTF-8?q?ionLabelAndIcon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nzy --- .../common/include/session_permission.h | 1 + .../js_scene_session.cpp | 58 ++++++++++++++++++ .../scene_session_manager/js_scene_session.h | 3 + .../session/host/include/main_session.h | 4 ++ .../session/host/include/scene_session.h | 1 + window_scene/session/host/include/session.h | 3 + .../host/include/zidl/session_interface.h | 12 ++++ .../include/zidl/session_ipc_interface_code.h | 1 + .../session/host/include/zidl/session_proxy.h | 2 + .../session/host/include/zidl/session_stub.h | 1 + .../session/host/src/main_session.cpp | 60 +++++++++++++++++++ window_scene/session/host/src/session.cpp | 1 + .../session/host/src/zidl/session_proxy.cpp | 36 +++++++++++ .../session/host/src/zidl/session_stub.cpp | 22 +++++++ .../test/unittest/session_proxy_test.cpp | 16 ++++- .../test/unittest/session_stub_test.cpp | 59 ++++++++++++++++++ 16 files changed, 279 insertions(+), 1 deletion(-) diff --git a/window_scene/common/include/session_permission.h b/window_scene/common/include/session_permission.h index 6539249394..bbe86e2ee6 100644 --- a/window_scene/common/include/session_permission.h +++ b/window_scene/common/include/session_permission.h @@ -26,6 +26,7 @@ constexpr const char* PERMISSION_KILL_APP_PROCESS = "ohos.permission.KILL_APP_PR constexpr const char* PERMISSION_MAIN_WINDOW_TOPMOST = "ohos.permission.WINDOW_TOPMOST"; constexpr const char* PERMISSION_CALLED_EXTENSION_ON_LOCK_SCREEN = "ohos.permission.CALLED_UIEXTENSION_ON_LOCK_SCREEN"; constexpr const char* PERMISSION_WRITE_APP_LOCK = "ohos.permission.WRITE_APP_LOCK"; +constexpr const char* PERMISSION_SET_ABILITY_INSTANCE_INFO = "ohos.permission.SET_ABILITY_INSTANCE_INFO"; } class SessionPermission { public: diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.cpp b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.cpp index db1d9ad28d..60c4c31d6b 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.cpp +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.cpp @@ -85,6 +85,7 @@ const std::string UPDATE_APP_USE_CONTROL_CB = "updateAppUseControl"; const std::string SESSION_DISPLAY_ID_CHANGE_CB = "sessionDisplayIdChange"; const std::string SET_SUPPORT_WINDOW_MODES_CB = "setSupportWindowModes"; const std::string SESSION_LOCK_STATE_CHANGE_CB = "sessionLockStateChange"; +const std::string UPDATE_SESSION_LABEL_AND_ICON_CB = "updateSessionLabelAndIcon"; constexpr int ARG_COUNT_3 = 3; constexpr int ARG_COUNT_4 = 4; @@ -155,6 +156,7 @@ const std::map ListenerFuncMap { {SET_SUPPORT_WINDOW_MODES_CB, ListenerFuncType::SET_SUPPORT_WINDOW_MODES_CB}, {WINDOW_MOVING_CB, ListenerFuncType::WINDOW_MOVING_CB}, {SESSION_LOCK_STATE_CHANGE_CB, ListenerFuncType::SESSION_LOCK_STATE_CHANGE_CB}, + {UPDATE_SESSION_LABEL_AND_ICON_CB, ListenerFuncType::UPDATE_SESSION_LABEL_AND_ICON_CB}, }; const std::vector g_syncGlobalPositionPermission { @@ -2512,6 +2514,9 @@ void JsSceneSession::ProcessRegisterCallback(ListenerFuncType listenerFuncType) case static_cast(ListenerFuncType::SESSION_LOCK_STATE_CHANGE_CB): ProcessSessionLockStateChangeRegister(); break; + case static_cast(ListenerFuncType::UPDATE_SESSION_LABEL_AND_ICON_CB): + ProcessUpdateSessionLabelAndIconRegister(); + break; default: break; } @@ -5840,4 +5845,57 @@ napi_value JsSceneSession::OnSendContainerModalEvent(napi_env env, napi_callback session->SendContainerModalEvent(eventName, eventValue); return NapiGetUndefined(env); } + +void JsSceneSession::ProcessUpdateSessionLabelAndIconRegister() +{ + TLOGD(WmsLogTag::WMS_MAIN, "in"); + auto session = weakSession_.promote(); + if (session == nullptr) { + TLOGE(WmsLogTag::WMS_MAIN, "session is nullptr, id:%{public}d", persistentId_); + return; + } + const char* const where = __func__; + session->SetUpdateSessionLabelAndIconListener([weakThis = wptr(this), where](const std::string& label, + const std::shared_ptr& icon) { + auto jsSceneSession = weakThis.promote(); + if (!jsSceneSession) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s jsSceneSession is null", where); + return; + } + jsSceneSession->UpdateSessionLabelAndIcon(label, icon); + }); + TLOGD(WmsLogTag::WMS_MAIN, "success"); +} + +void JsSceneSession::UpdateSessionLabelAndIcon(const std::string& label, const std::shared_ptr& icon) +{ + TLOGI(WmsLogTag::WMS_MAIN, "in"); + const char* const where = __func__; + auto task = [weakThis = wptr(this), persistentId = persistentId_, label, icon, env = env_, where] { + auto jsSceneSession = weakThis.promote(); + if (!jsSceneSession || jsSceneSessionMap_.find(persistentId) == jsSceneSessionMap_.end()) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s jsSceneSession id:%{public}d has been destroyed", + where, persistentId); + return; + } + auto jsCallBack = jsSceneSession->GetJSCallback(UPDATE_SESSION_LABEL_AND_ICON_CB); + if (!jsCallBack) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s jsCallBack is nullptr", where); + return; + } + napi_value jsLabel = CreateJsValue(env, label); + if (jsLabel == nullptr) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s label is nullptr", where); + return; + } + napi_value jsIcon = Media::PixelMapNapi::CreatePixelMap(env, icon); + if (jsIcon == nullptr) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s icon is nullptr", where); + return; + } + napi_value argv[] = {jsLabel, jsIcon}; + napi_call_function(env, NapiGetUndefined(env), jsCallBack->GetNapiValue(), ArraySize(argv), argv, nullptr); + }; + taskScheduler_->PostMainThreadTask(task, __func__); +} } // namespace OHOS::Rosen diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.h b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.h index c4a6e850e7..48f7854a13 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.h +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session.h @@ -86,6 +86,7 @@ enum class ListenerFuncType : uint32_t { SET_SUPPORT_WINDOW_MODES_CB, WINDOW_MOVING_CB, SESSION_LOCK_STATE_CHANGE_CB, + UPDATE_SESSION_LABEL_AND_ICON_CB, }; class SceneSession; @@ -316,6 +317,7 @@ private: void ProcessSetWindowRectAutoSaveRegister(); void RegisterUpdateAppUseControlCallback(); void ProcessWindowMovingRegister(); + void ProcessUpdateSessionLabelAndIconRegister(); /* * PC Window Layout @@ -373,6 +375,7 @@ private: void OnSetWindowRectAutoSave(bool enabled); void OnUpdateAppUseControl(ControlAppType type, bool isNeedControl); void OnWindowMoving(DisplayId displayId, int32_t pointerX, int32_t pointerY); + void UpdateSessionLabelAndIcon(const std::string& label, const std::shared_ptr& icon); /* * PC Window Layout diff --git a/window_scene/session/host/include/main_session.h b/window_scene/session/host/include/main_session.h index f2dc5f53f5..e4913e41a7 100644 --- a/window_scene/session/host/include/main_session.h +++ b/window_scene/session/host/include/main_session.h @@ -68,6 +68,8 @@ public: void NotifySessionLockStateChange(bool isLockedState) override; void SetSessionLockState(bool isLockedState); bool GetSessionLockState() const; + WSError SetSessionLabelAndIcon(const std::string& label, const std::shared_ptr& icon) override; + void SetUpdateSessionLabelAndIconListener(NofitySessionLabelAndIconUpdatedFunc&& func) override; protected: void UpdatePointerArea(const WSRect& rect) override; @@ -79,6 +81,8 @@ private: /* * Window LifeCycle */ + WSError SetSessionLabelAndIconInner(const std::string& label, const std::shared_ptr& icon); + NotifySessionLockStateChangeCallback onSessionLockStateChangeCallback_; bool isLockedState_ = false; }; diff --git a/window_scene/session/host/include/scene_session.h b/window_scene/session/host/include/scene_session.h index 7f0fddedf1..6c5306da29 100644 --- a/window_scene/session/host/include/scene_session.h +++ b/window_scene/session/host/include/scene_session.h @@ -459,6 +459,7 @@ public: void SetVisibilityChangedDetectFunc(VisibilityChangedDetectFunc&& func); virtual void RegisterSessionLockStateChangeCallback(NotifySessionLockStateChangeCallback&& callback) {} virtual void NotifySessionLockStateChange(bool isLockedState) {} + virtual void SetUpdateSessionLabelAndIconListener(NofitySessionLabelAndIconUpdatedFunc&& func) {} void SendPointerEventToUI(std::shared_ptr pointerEvent); bool SendKeyEventToUI(std::shared_ptr keyEvent, bool isPreImeEvent = false); diff --git a/window_scene/session/host/include/session.h b/window_scene/session/host/include/session.h index 39d48c4fb6..c7c7e22ec0 100644 --- a/window_scene/session/host/include/session.h +++ b/window_scene/session/host/include/session.h @@ -92,6 +92,8 @@ using VisibilityChangedDetectFunc = std::function; using RequestVsyncFunc = std::function& callback)>; using NotifyWindowMovingFunc = std::function; +using NofitySessionLabelAndIconUpdatedFunc = + std::function& icon)>; class ILifecycleListener { public: @@ -699,6 +701,7 @@ protected: NotifySessionExceptionFunc sessionExceptionFunc_; NotifySessionExceptionFunc jsSceneSessionExceptionFunc_; VisibilityChangedDetectFunc visibilityChangedDetectFunc_ GUARDED_BY(SCENE_GUARD); + NofitySessionLabelAndIconUpdatedFunc updateSessionLabelAndIconFunc_; /* * Window Rotate Animation diff --git a/window_scene/session/host/include/zidl/session_interface.h b/window_scene/session/host/include/zidl/session_interface.h index 1e58a93b27..4e3453bc5b 100644 --- a/window_scene/session/host/include/zidl/session_interface.h +++ b/window_scene/session/host/include/zidl/session_interface.h @@ -324,6 +324,18 @@ public: */ virtual WSError NotifySupportWindowModesChange( const std::vector& supportedWindowModes) { return WSError::WS_OK; } + + /** + * @brief set session label and icon + * + * @param label + * @param icon + * @return Returns WSError::WS_OK if called success, otherwise failed. + * @permission ohos.permission.SET_ABILITY_INSTANCE_INFO + * @scene 15 + */ + virtual WSError SetSessionLabelAndIcon(const std::string& label, + const std::shared_ptr& icon) { return WSError::WS_OK; } }; } // namespace OHOS::Rosen diff --git a/window_scene/session/host/include/zidl/session_ipc_interface_code.h b/window_scene/session/host/include/zidl/session_ipc_interface_code.h index 8e7d311b65..f6660c649d 100644 --- a/window_scene/session/host/include/zidl/session_ipc_interface_code.h +++ b/window_scene/session/host/include/zidl/session_ipc_interface_code.h @@ -77,6 +77,7 @@ enum class SessionInterfaceCode { TRANS_ID_GET_GLOBAL_SCALED_RECT, TRANS_ID_SET_WINDOW_RECT_AUTO_SAVE, TRANS_ID_SET_SUPPORT_WINDOW_MODES, + TRANS_ID_SET_SESSION_LABEL_AND_ICON, // Extension TRANS_ID_TRANSFER_ABILITY_RESULT = 500, diff --git a/window_scene/session/host/include/zidl/session_proxy.h b/window_scene/session/host/include/zidl/session_proxy.h index 63ab0eac81..0f60ea9e39 100644 --- a/window_scene/session/host/include/zidl/session_proxy.h +++ b/window_scene/session/host/include/zidl/session_proxy.h @@ -73,6 +73,8 @@ public: WSError UpdateWindowSceneAfterCustomAnimation(bool isAdd) override; WSError RaiseAboveTarget(int32_t subWindowId) override; WSError RaiseAppMainWindowToTop() override; + WSError SetSessionLabelAndIcon(const std::string& label, + const std::shared_ptr& icon) override; /* * UIExtension diff --git a/window_scene/session/host/include/zidl/session_stub.h b/window_scene/session/host/include/zidl/session_stub.h index a29fa1300e..d657336cd9 100644 --- a/window_scene/session/host/include/zidl/session_stub.h +++ b/window_scene/session/host/include/zidl/session_stub.h @@ -88,6 +88,7 @@ private: int HandleSetGestureBackEnabled(MessageParcel& data, MessageParcel& reply); int HandleNotifySubModalTypeChange(MessageParcel& data, MessageParcel& reply); int HandleNotifyMainModalTypeChange(MessageParcel& data, MessageParcel& reply); + int HandleSetSessionLabelAndIcon(MessageParcel& data, MessageParcel& reply); // extension extension int HandleTransferAbilityResult(MessageParcel& data, MessageParcel& reply); diff --git a/window_scene/session/host/src/main_session.cpp b/window_scene/session/host/src/main_session.cpp index 70b0518b04..faa7bcaf9b 100644 --- a/window_scene/session/host/src/main_session.cpp +++ b/window_scene/session/host/src/main_session.cpp @@ -15,14 +15,18 @@ #include "session/host/include/main_session.h" +#include + #include "common/include/fold_screen_state_internel.h" #include "session_helper.h" #include "window_helper.h" #include "session/host/include/scene_persistent_storage.h" +#include "common/include/session_permission.h" namespace OHOS::Rosen { namespace { constexpr HiviewDFX::HiLogLabel LABEL = { LOG_CORE, HILOG_DOMAIN_WINDOW, "MainSession" }; +constexpr int32_t MAX_LABEL_SIZE = 1024; } // namespace MainSession::MainSession(const SessionInfo& info, const sptr& specificCallback) @@ -382,4 +386,60 @@ bool MainSession::GetSessionLockState() const { return isLockedState_; } + +WSError MainSession::SetSessionLabelAndIcon(const std::string& label, + const std::shared_ptr& icon) +{ + TLOGI(WmsLogTag::WMS_MAIN, "in"); + int32_t callingPid = IPCSkeleton::GetCallingPid(); + const bool pidCheck = (callingPid != -1) && (callingPid == GetCallingPid()); + if (!pidCheck || + !SessionPermission::VerifyCallingPermission(PermissionConstants::PERMISSION_SET_ABILITY_INSTANCE_INFO)) { + TLOGE(WmsLogTag::WMS_MAIN, + "The caller has not permission granted or not the same processs, " + "callingPid_: %{public}d, callingPid: %{public}d, bundleName: %{public}s", + GetCallingPid(), callingPid, GetSessionInfo().bundleName_.c_str()); + return WSError::WS_ERROR_INVALID_PERMISSION; + } + if (!systemConfig_.IsPcWindow()) { + TLOGE(WmsLogTag::WMS_MAIN, "device not support"); + return WSError::WS_ERROR_DEVICE_NOT_SUPPORT; + } + if (label.empty() || label.length() > MAX_LABEL_SIZE) { + TLOGE(WmsLogTag::WMS_MAIN, "invalid label"); + return WSError::WS_ERROR_SET_SESSION_LABEL_FAILED; + } + return SetSessionLabelAndIconInner(label, icon); +} + +WSError MainSession::SetSessionLabelAndIconInner(const std::string& label, + const std::shared_ptr& icon) +{ + const char* const where = __func__; + PostTask([weakThis = wptr(this), where, label, icon] { + auto session = weakThis.promote(); + if (session == nullptr) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s session is nullptr", where); + return WSError::WS_ERROR_NULLPTR; + } + if (session->updateSessionLabelAndIconFunc_) { + session->updateSessionLabelAndIconFunc_(label, icon); + } + return WSError::WS_OK; + }, __func__); + return WSError::WS_OK; +} + +void MainSession::SetUpdateSessionLabelAndIconListener(NofitySessionLabelAndIconUpdatedFunc&& func) +{ + const char* const where = __func__; + PostTask([weakThis = wptr(this), func = std::move(func), where] { + auto session = weakThis.promote(); + if (!session) { + TLOGNE(WmsLogTag::WMS_MAIN, "%{public}s session is null", where); + return; + } + session->updateSessionLabelAndIconFunc_ = std::move(func); + }, __func__); +} } // namespace OHOS::Rosen diff --git a/window_scene/session/host/src/session.cpp b/window_scene/session/host/src/session.cpp index 8e6f245ced..0bb37e44f0 100644 --- a/window_scene/session/host/src/session.cpp +++ b/window_scene/session/host/src/session.cpp @@ -2435,6 +2435,7 @@ void Session::UnregisterSessionChangeListeners() sessionInfoLockedStateChangeFunc_ = nullptr; contextTransparentFunc_ = nullptr; sessionRectChangeFunc_ = nullptr; + updateSessionLabelAndIconFunc_ = nullptr; WLOGFD("UnregisterSessionChangeListenser, id: %{public}d", GetPersistentId()); } diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index ad7f71524d..094788d8b2 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -2278,4 +2278,40 @@ WSError SessionProxy::NotifySupportWindowModesChange( } return WSError::WS_OK; } + +WSError SessionProxy::SetSessionLabelAndIcon(const std::string& label, const std::shared_ptr& icon) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(GetDescriptor())) { + TLOGE(WmsLogTag::WMS_MAIN, "writeInterfaceToken failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + if (!data.WriteString(label)) { + TLOGE(WmsLogTag::WMS_MAIN, "write label failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + if (!data.WriteParcelable(icon.get())) { + TLOGE(WmsLogTag::WMS_MAIN, "write icon failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + + sptr remote = Remote(); + if (remote == nullptr) { + TLOGE(WmsLogTag::WMS_MAIN, "remote is null"); + return WSError::WS_ERROR_IPC_FAILED; + } + if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_SESSION_LABEL_AND_ICON), + data, reply, option) != ERR_NONE) { + TLOGE(WmsLogTag::WMS_MAIN, "sendRequest failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + int32_t ret = 0; + if (!reply.ReadInt32(ret)) { + TLOGE(WmsLogTag::WMS_MAIN, "read ret failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + return static_cast(ret); +} } // namespace OHOS::Rosen diff --git a/window_scene/session/host/src/zidl/session_stub.cpp b/window_scene/session/host/src/zidl/session_stub.cpp index 13cd8d474d..16a5bc2527 100644 --- a/window_scene/session/host/src/zidl/session_stub.cpp +++ b/window_scene/session/host/src/zidl/session_stub.cpp @@ -234,6 +234,8 @@ int SessionStub::ProcessRemoteRequest(uint32_t code, MessageParcel& data, Messag return HandleSetSupportedWindowModes(data, reply); case static_cast(SessionInterfaceCode::TRANS_ID_SEND_EXTENSION_DATA): return HandleExtensionProviderData(data, reply); + case static_cast(SessionInterfaceCode::TRANS_ID_SET_SESSION_LABEL_AND_ICON): + return HandleSetSessionLabelAndIcon(data, reply); default: WLOGFE("Failed to find function handler!"); return IPCObjectStub::OnRemoteRequest(code, data, reply, option); @@ -1390,4 +1392,24 @@ int SessionStub::HandleSetSupportedWindowModes(MessageParcel& data, MessageParce NotifySupportWindowModesChange(supportedWindowModes); return ERR_NONE; } + +int SessionStub::HandleSetSessionLabelAndIcon(MessageParcel& data, MessageParcel& reply) +{ + std::string label; + if (!data.ReadString(label)) { + TLOGE(WmsLogTag::WMS_MAIN, "read label failed"); + return ERR_INVALID_DATA; + } + std::shared_ptr icon(data.ReadParcelable()); + if (icon == nullptr) { + TLOGE(WmsLogTag::WMS_MAIN, "read icon failed"); + return ERR_INVALID_DATA; + } + WSError errCode = SetSessionLabelAndIcon(label, icon); + if (!reply.WriteInt32(static_cast(errCode))) { + TLOGE(WmsLogTag::WMS_MAIN, "write errCode fail."); + return ERR_INVALID_DATA; + } + return ERR_NONE; +} } // namespace OHOS::Rosen diff --git a/window_scene/test/unittest/session_proxy_test.cpp b/window_scene/test/unittest/session_proxy_test.cpp index 4a0d5a2dd4..65d0a7ac77 100755 --- a/window_scene/test/unittest/session_proxy_test.cpp +++ b/window_scene/test/unittest/session_proxy_test.cpp @@ -1121,6 +1121,20 @@ HWTEST_F(SessionProxyTest, UpdatePiPRect, Function | SmallTest | Level2) ASSERT_EQ(res, WSError::WS_ERROR_IPC_FAILED); GTEST_LOG_(INFO) << "SessionProxyTest: UpdatePiPRect end"; } + +/** + * @tc.name: SetSessionLabelAndIcon + * @tc.desc: SetSessionLabelAndIcon + * @tc.type: FUNC + */ +HWTEST_F(SessionProxyTest, SetSessionLabelAndIcon, Function | SmallTest | Level2) +{ + std::string label = "SetSessionLabelAndIcon"; + std::shared_ptr icon = std::make_shared(); + sptr sProxy = sptr::MakeSptr(nullptr); + + ASSERT_EQ(WSError::WS_ERROR_IPC_FAILED, sProxy->SetSessionLabelAndIcon(label, icon)); +} } // namespace } // namespace Rosen -} // namespace OHOS +} // namespace OHOS \ No newline at end of file diff --git a/window_scene/test/unittest/session_stub_test.cpp b/window_scene/test/unittest/session_stub_test.cpp index 64395b083c..a5242ec245 100644 --- a/window_scene/test/unittest/session_stub_test.cpp +++ b/window_scene/test/unittest/session_stub_test.cpp @@ -889,6 +889,65 @@ HWTEST_F(SessionStubTest, HandleIsStartMoving, Function | SmallTest | Level2) auto result = session_->HandleIsStartMoving(data, reply); ASSERT_EQ(result, ERR_NONE); } + +/** + * @tc.name: HandleSetSessionLabelAndIcon01 + * @tc.desc: HandleSetSessionLabelAndIcon + * @tc.type: FUNC + */ +HWTEST_F(SessionStubTest, HandleSetSessionLabelAndIcon01, Function | SmallTest | Level2) +{ + MessageParcel data; + MessageParcel reply; + std::shared_ptr icon = std::make_shared(); + data.WriteParcelable(icon.get()); + + auto res = session_->HandleSetSessionLabelAndIcon(data, reply); + ASSERT_EQ(ERR_INVALID_DATA, res); +} + +/** + * @tc.name: HandleSetSessionLabelAndIcon02 + * @tc.desc: HandleSetSessionLabelAndIcon + * @tc.type: FUNC + */ +HWTEST_F(SessionStubTest, HandleSetSessionLabelAndIcon02, Function | SmallTest | Level2) +{ + MessageParcel data; + MessageParcel reply; + std::string label = "demo label"; + data.WriteString(label); + std::shared_ptr icon = nullptr; + data.WriteParcelable(icon.get()); + + auto res = session_->HandleSetSessionLabelAndIcon(data, reply); + ASSERT_EQ(ERR_INVALID_DATA, res); +} + +/** + * @tc.name: HandleSetSessionLabelAndIcon03 + * @tc.desc: HandleSetSessionLabelAndIcon + * @tc.type: FUNC + */ +HWTEST_F(SessionStubTest, HandleSetSessionLabelAndIcon03, Function | SmallTest | Level2) +{ + MessageParcel data; + MessageParcel reply; + std::string label = "demo label"; + data.WriteString(label); + const uint32_t color[] = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}; + uint32_t len = sizeof(color) / sizeof(color[0]); + Media::InitializationOptions opts; + opts.size.width = 2; + opts.size.height = 3; + opts.pixelFormat = Media::PixelFormat::UNKNOWN; + opts.alphaType = Media::AlphaType::IMAGE_ALPHA_TYPE_OPAQUE; + std::shared_ptr icon = Media::PixelMap::Create(color, len, 0, opts.size.width, opts); + data.WriteParcelable(icon.get()); + + auto res = session_->HandleSetSessionLabelAndIcon(data, reply); + ASSERT_EQ(ERR_NONE, res); +} } } // namespace Rosen } // namespace OHOS \ No newline at end of file -- Gitee From ce4b9c7c1e85e0d766beebce0cf63f8e2610fcd2 Mon Sep 17 00:00:00 2001 From: nzy Date: Thu, 16 Jan 2025 19:36:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E6=84=8F=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nzy --- window_scene/session/host/src/main_session.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/window_scene/session/host/src/main_session.cpp b/window_scene/session/host/src/main_session.cpp index faa7bcaf9b..8684017dfc 100644 --- a/window_scene/session/host/src/main_session.cpp +++ b/window_scene/session/host/src/main_session.cpp @@ -18,10 +18,10 @@ #include #include "common/include/fold_screen_state_internel.h" -#include "session_helper.h" +#include "common/include/session_permission.h" #include "window_helper.h" +#include "session_helper.h" #include "session/host/include/scene_persistent_storage.h" -#include "common/include/session_permission.h" namespace OHOS::Rosen { namespace { @@ -390,7 +390,7 @@ bool MainSession::GetSessionLockState() const WSError MainSession::SetSessionLabelAndIcon(const std::string& label, const std::shared_ptr& icon) { - TLOGI(WmsLogTag::WMS_MAIN, "in"); + TLOGI(WmsLogTag::WMS_MAIN, "id: %{public}d", persistentId_); int32_t callingPid = IPCSkeleton::GetCallingPid(); const bool pidCheck = (callingPid != -1) && (callingPid == GetCallingPid()); if (!pidCheck || -- Gitee