diff --git a/interfaces/inner_api/ability_manager/include/kiosk_status.h b/interfaces/inner_api/ability_manager/include/kiosk_status.h index 5df85c30b41dfbbe4b03ceb79ffd0194c95506e0..29af392fe75a6e846e654514e3dfae0395d3e0ed 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 8854ad86ad3c79a5a7913204b10b5d2d035bc4a9..bf40b4539c4b56fb5361d36692050f5980e64fea 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -6736,6 +6736,10 @@ int32_t AbilityManagerProxy::EnterKioskMode(sptr callerToken) int32_t AbilityManagerProxy::ExitKioskMode(sptr callerToken) { + TAG_LOGI(AAFwkTag::ABILITYMGR, "ttt 1"); + KioskStatus kioskStatus; + GetKioskStatus(kioskStatus); + TAG_LOGI(AAFwkTag::ABILITYMGR, "ttt 1-1"); MessageParcel data; MessageParcel reply; MessageOption option; @@ -6787,6 +6791,11 @@ int32_t AbilityManagerProxy::GetKioskStatus(KioskStatus &kioskStatus) return ERR_READ_RESULT_PARCEL_FAILED; } kioskStatus = *info; + sptr token = reply.ReadRemoteObject(); + if (token != nullptr) { + TAG_LOGI(AAFwkTag::ABILITYMGR, "ttt 1-1-1"); + 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 a11f4f41b3e2b2776dc882bff13096a2cf5ea060..16d0172d986e5dc9b4d9f62a1d82c94ed00be582 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 dac983486c6b46f926638ae5c79cd0a73a73b334..94584e1e4a5e79c926ca7df2557f7d669321a755 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_); } } @@ -94,6 +94,7 @@ int32_t KioskManager::UpdateKioskApplicationList(const std::vector int32_t KioskManager::EnterKioskMode(sptr callerToken) { + kioskStatus_.kioskToken_ = callerToken; if (!system::GetBoolParameter(KIOSK_MODE_ENABLED, false)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "Disabled config"); return ERR_CAPABILITY_NOT_SUPPORT; @@ -120,6 +121,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..e90a1ad66798bfe0ba2ca81cb9d002d27f449159 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