From ac014b6d427e2754efcc7161139b91f6477d1c98 Mon Sep 17 00:00:00 2001 From: wangbing Date: Mon, 16 Jun 2025 15:54:19 +0800 Subject: [PATCH] kiosk status token Signed-off-by: wangbing --- .../ability_manager/include/kiosk_status.h | 12 +++---- services/abilitymgr/src/kiosk_manager.cpp | 3 +- services/abilitymgr/src/kiosk_status.cpp | 36 +++++++++---------- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/interfaces/inner_api/ability_manager/include/kiosk_status.h b/interfaces/inner_api/ability_manager/include/kiosk_status.h index 5df85c30b41..80511f860c4 100644 --- a/interfaces/inner_api/ability_manager/include/kiosk_status.h +++ b/interfaces/inner_api/ability_manager/include/kiosk_status.h @@ -16,8 +16,8 @@ #define OHOS_ABILITY_RUNTIME_KIOSK_STATUS_H #include - -#include "parcel.h" +#include "iremote_object.h" +#include "dp_parcel.h" namespace OHOS { namespace AAFwk { @@ -25,15 +25,15 @@ namespace AAFwk { * @struct KioskStatus * KioskStatus is used to save information about Kiosk mode. */ -struct KioskStatus : public Parcelable { - bool ReadFromParcel(Parcel &parcel); - virtual bool Marshalling(Parcel &parcel) const override; - static KioskStatus *Unmarshalling(Parcel &parcel); +struct KioskStatus : public DpParcel { + bool Marshalling(MessageParcel& parcel) const override; + bool UnMarshalling(MessageParcel& parcel) override; void Clear(); bool isKioskMode_ = false; std::string kioskBundleName_; int32_t kioskBundleUid_{}; + sptr kioskToken_; }; } // namespace AAFwk } // namespace OHOS 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..79ee31731e6 100644 --- a/services/abilitymgr/src/kiosk_status.cpp +++ b/services/abilitymgr/src/kiosk_status.cpp @@ -19,26 +19,7 @@ namespace OHOS { namespace AAFwk { -bool KioskStatus::ReadFromParcel(Parcel &parcel) -{ - isKioskMode_ = parcel.ReadBool(); - kioskBundleName_ = Str16ToStr8(parcel.ReadString16()); - kioskBundleUid_ = parcel.ReadInt32(); - return true; -} - -KioskStatus *KioskStatus::Unmarshalling(Parcel &parcel) -{ - KioskStatus *info = new KioskStatus(); - if (!info->ReadFromParcel(parcel)) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "ReadFromParcel failed"); - delete info; - info = nullptr; - } - return info; -} - -bool KioskStatus::Marshalling(Parcel &parcel) const +bool KioskStatus::Marshalling(MessageParcel& parcel) { if (!parcel.WriteBool(isKioskMode_)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "write isKioskMode_ failed"); @@ -54,6 +35,20 @@ bool KioskStatus::Marshalling(Parcel &parcel) const TAG_LOGE(AAFwkTag::ABILITYMGR, "write kioskBundleUid_ failed"); return false; } + + if (!parcel.WriteRemoteObject(kioskToken_)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "write kioskToken_ failed"); + return false; + } + return true; +} + +bool KioskStatus::UnMarshalling(MessageParcel& parcel) +{ + isKioskMode_ = parcel.ReadBool(); + kioskBundleName_ = Str16ToStr8(parcel.ReadString16()); + kioskBundleUid_ = parcel.ReadInt32(); + kioskToken_ = parcel.ReadRemoteObject(); return true; } @@ -62,6 +57,7 @@ void KioskStatus::Clear() isKioskMode_ = false; kioskBundleUid_ = 0; kioskBundleName_.clear(); + kioskToken_ = nullptr; } } // namespace AAFwk } // namespace OHOS -- Gitee