diff --git a/interfaces/inner_api/ability_manager/include/kiosk_status.h b/interfaces/inner_api/ability_manager/include/kiosk_status.h index 5df85c30b41dfbbe4b03ceb79ffd0194c95506e0..80511f860c48daf5c263f23c3b6eddd32c3a94fd 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 dac983486c6b46f926638ae5c79cd0a73a73b334..6f3106b22ffd13dc268a18aaae0e567be9d09eee 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 34e457ac3dd1d1f35cabe127ea4eed3a44f7e97d..79ee31731e691aac7c90fcf8dd4154444347f426 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