From 4e235a5fcf52048cd5e53975019e11f90fb2df39 Mon Sep 17 00:00:00 2001 From: wangbing Date: Wed, 18 Jun 2025 17:21:01 +0800 Subject: [PATCH] kiosk status token Signed-off-by: wangbing --- interfaces/inner_api/ability_manager/include/kiosk_status.h | 2 ++ services/abilitymgr/src/ability_manager_proxy.cpp | 4 ++++ services/abilitymgr/src/ability_manager_stub.cpp | 5 +++++ services/abilitymgr/src/kiosk_manager.cpp | 3 ++- services/abilitymgr/src/kiosk_status.cpp | 1 + 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/interfaces/inner_api/ability_manager/include/kiosk_status.h b/interfaces/inner_api/ability_manager/include/kiosk_status.h index 5df85c30b41..29af392fe75 100644 --- a/interfaces/inner_api/ability_manager/include/kiosk_status.h +++ b/interfaces/inner_api/ability_manager/include/kiosk_status.h @@ -18,6 +18,7 @@ #include #include "parcel.h" +#include "iremote_object.h" namespace OHOS { namespace AAFwk { @@ -34,6 +35,7 @@ struct KioskStatus : public Parcelable { bool isKioskMode_ = false; std::string kioskBundleName_; int32_t kioskBundleUid_{}; + sptr kioskToken_; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 8854ad86ad3..054dbe89871 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -6787,6 +6787,10 @@ int32_t AbilityManagerProxy::GetKioskStatus(KioskStatus &kioskStatus) return ERR_READ_RESULT_PARCEL_FAILED; } kioskStatus = *info; + sptr token = reply.ReadRemoteObject(); + if (token != nullptr) { + kioskStatus.kioskToken_ = token; + } return reply.ReadInt32(); } diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index a11f4f41b3e..16d0172d986 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -4796,6 +4796,11 @@ int32_t AbilityManagerStub::GetKioskStatusInner(MessageParcel &data, MessageParc TAG_LOGE(AAFwkTag::ABILITYMGR, "write result fail"); return ERR_WRITE_RESULT_CODE_FAILED; } + + if (kioskStatus.kioskToken_ != nullptr && !reply.WriteRemoteObject(kioskStatus.kioskToken_)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "write token fail"); + return ERR_WRITE_CALLER_TOKEN_FAILED; + } return NO_ERROR; } diff --git a/services/abilitymgr/src/kiosk_manager.cpp b/services/abilitymgr/src/kiosk_manager.cpp index dac983486c6..6f3106b22ff 100644 --- a/services/abilitymgr/src/kiosk_manager.cpp +++ b/services/abilitymgr/src/kiosk_manager.cpp @@ -51,7 +51,7 @@ void KioskManager::OnAppStop(const AppInfo &info) info.bundleName.c_str(), static_cast(info.state)); std::lock_guard lock(kioskManagermutex_); if (IsInKioskModeInner() && (info.bundleName == kioskStatus_.kioskBundleName_)) { - ExitKioskModeInner(info.bundleName, nullptr); + ExitKioskModeInner(info.bundleName, kioskStatus_.kioskToken_); } } @@ -120,6 +120,7 @@ int32_t KioskManager::EnterKioskMode(sptr callerToken) kioskStatus_.isKioskMode_ = true; kioskStatus_.kioskBundleName_ = bundleName; kioskStatus_.kioskBundleUid_ = IPCSkeleton::GetCallingUid(); + kioskStatus_.kioskToken_ = callerToken; GetEnterKioskModeCallback()(); NotifyKioskModeChanged(true); auto sceneSessionManager = Rosen::SessionManagerLite::GetInstance().GetSceneSessionManagerLiteProxy(); diff --git a/services/abilitymgr/src/kiosk_status.cpp b/services/abilitymgr/src/kiosk_status.cpp index 34e457ac3dd..e90a1ad6679 100644 --- a/services/abilitymgr/src/kiosk_status.cpp +++ b/services/abilitymgr/src/kiosk_status.cpp @@ -62,6 +62,7 @@ void KioskStatus::Clear() isKioskMode_ = false; kioskBundleUid_ = 0; kioskBundleName_.clear(); + kioskToken_ = nullptr; } } // namespace AAFwk } // namespace OHOS -- Gitee