mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-25 12:23:20 -04:00
预加载通知方案修改
Signed-off-by: zhangyuhang72 <zhangyuhang72@huawei.com> Change-Id: I107024477cfa39dd787634bdb3858e7238d262ed
This commit is contained in:
@@ -968,6 +968,10 @@ enum {
|
||||
START_UI_ABILITIES_SPECIFIED_FAILED_ERROR = 2097382,
|
||||
|
||||
ERR_PRELOAD_APP_RECORD_ALREADY_EXIST = 2097383,
|
||||
|
||||
ERR_NOTIFY_PRELOAD_ABILITY_NO_CHANGE = 2097384,
|
||||
|
||||
ERR_NOTIFY_PRELOAD_ABILITY_HAS_OTHER = 2097385,
|
||||
|
||||
/**
|
||||
* Native error(3000000) for target bundle not exist.
|
||||
|
||||
@@ -512,7 +512,7 @@ public:
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground)
|
||||
{
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
@@ -449,7 +449,7 @@ public:
|
||||
virtual int32_t PreloadApplicationByPhase(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
AppExecFwk::PreloadPhase preloadPhase) override;
|
||||
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token) override;
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground) override;
|
||||
|
||||
virtual int32_t CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
bool &isExist) override;
|
||||
|
||||
@@ -984,7 +984,7 @@ public:
|
||||
int32_t PreloadApplicationByPhase(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
AppExecFwk::PreloadPhase preloadPhase);
|
||||
|
||||
int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token);
|
||||
int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground);
|
||||
|
||||
int32_t CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
bool &isExist);
|
||||
|
||||
@@ -161,7 +161,7 @@ public:
|
||||
*
|
||||
* @param preloadProcessData Preload process data.
|
||||
*/
|
||||
virtual void OnPreloadProcessStateChanged(const PreloadProcessData &preloadProcessData) override;
|
||||
virtual void OnProcessPreForegroundChanged(const PreloadProcessData &preloadProcessData) override;
|
||||
|
||||
private:
|
||||
bool WriteInterfaceToken(MessageParcel &data);
|
||||
|
||||
@@ -158,7 +158,7 @@ public:
|
||||
*/
|
||||
virtual void OnKeepAliveStateChanged(const ProcessData &processData) override;
|
||||
|
||||
virtual void OnPreloadProcessStateChanged(const PreloadProcessData &preloadProcessData) override;
|
||||
virtual void OnProcessPreForegroundChanged(const PreloadProcessData &preloadProcessData) override;
|
||||
|
||||
private:
|
||||
int32_t HandleOnForegroundApplicationChanged(MessageParcel &data, MessageParcel &reply);
|
||||
@@ -197,7 +197,7 @@ private:
|
||||
|
||||
int32_t HandleOnKeepAliveStateChanged(MessageParcel &data, MessageParcel &reply);
|
||||
|
||||
int32_t HandleOnPreloadProcessStateChanged(MessageParcel &data, MessageParcel &reply);
|
||||
int32_t HandleOnProcessPreForegroundChanged(MessageParcel &data, MessageParcel &reply);
|
||||
|
||||
static std::mutex callbackMutex_;
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ public:
|
||||
*
|
||||
* @param preloadProcessData Preload process data.
|
||||
*/
|
||||
virtual void OnPreloadProcessStateChanged(const PreloadProcessData &preloadProcessData) {};
|
||||
virtual void OnProcessPreForegroundChanged(const PreloadProcessData &preloadProcessData) {};
|
||||
|
||||
enum class Message {
|
||||
TRANSACT_ON_FOREGROUND_APPLICATION_CHANGED = 0,
|
||||
|
||||
@@ -31,9 +31,9 @@ struct PreloadProcessData : public Parcelable {
|
||||
|
||||
bool ReadFromParcel(Parcel &parcel);
|
||||
|
||||
bool isPreForeground = false;
|
||||
pid_t pid = 0;
|
||||
int32_t uid = 0;
|
||||
int32_t state = 0;
|
||||
std::string bundleName;
|
||||
};
|
||||
} // namespace AppExecFwk
|
||||
|
||||
@@ -61,6 +61,7 @@ struct RunningProcessInfo : public Parcelable {
|
||||
bool isStrictMode = false;
|
||||
bool isDebugApp = false;
|
||||
bool isExiting = false;
|
||||
bool isPreForeground = false;
|
||||
std::int32_t pid_;
|
||||
std::int32_t uid_;
|
||||
std::int32_t bundleType = 0;
|
||||
|
||||
@@ -1588,7 +1588,7 @@ int32_t AmsMgrProxy::PreloadApplicationByPhase(const std::string &bundleName, in
|
||||
return reply.ReadInt32();
|
||||
}
|
||||
|
||||
int32_t AmsMgrProxy::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
int32_t AmsMgrProxy::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground)
|
||||
{
|
||||
if (token == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "token null.");
|
||||
@@ -1596,7 +1596,7 @@ int32_t AmsMgrProxy::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
}
|
||||
MessageParcel data;
|
||||
MessageParcel reply;
|
||||
MessageOption option(MessageOption::TF_ASYNC);
|
||||
MessageOption option;
|
||||
if (!WriteInterfaceToken(data)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "Write interface token failed.");
|
||||
return AAFwk::ERR_WRITE_INTERFACE_TOKEN_FAILED;
|
||||
@@ -1605,6 +1605,7 @@ int32_t AmsMgrProxy::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "Write token failed.");
|
||||
return AAFwk::ERR_WRITE_CALLER_TOKEN_FAILED;
|
||||
}
|
||||
PARCEL_UTIL_WRITE_RET_INT(data, Bool, isPreForeground);
|
||||
|
||||
auto ret = SendTransactCmd(
|
||||
static_cast<uint32_t>(IAmsMgr::Message::NOTIFY_PRELOAD_ABILITY_STATE_CHANGED), data, reply, option);
|
||||
@@ -1612,7 +1613,7 @@ int32_t AmsMgrProxy::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "Send request failed, err: %{public}d.", ret);
|
||||
return ret;
|
||||
}
|
||||
return NO_ERROR;
|
||||
return reply.ReadInt32();
|
||||
}
|
||||
|
||||
int32_t AmsMgrProxy::CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
|
||||
@@ -1000,11 +1000,16 @@ int32_t AmsMgrStub::HandleNotifyPreloadAbilityStateChanged(MessageParcel &data,
|
||||
{
|
||||
HITRACE_METER(HITRACE_TAG_APP);
|
||||
sptr<IRemoteObject> token = data.ReadRemoteObject();
|
||||
bool isPreForeground = data.ReadBool();
|
||||
if (token == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "null token");
|
||||
return AAFwk::INVALID_CALLER_TOKEN;
|
||||
}
|
||||
NotifyPreloadAbilityStateChanged(token);
|
||||
auto ret = NotifyPreloadAbilityStateChanged(token, isPreForeground);
|
||||
if (!reply.WriteInt32(ret)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "Fail to write ret");
|
||||
return AAFwk::ERR_WRITE_RESULT_CODE_FAILED;
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@@ -1635,7 +1635,7 @@ int32_t AppMgrClient::PreloadApplicationByPhase(const std::string &bundleName, i
|
||||
return amsService->PreloadApplicationByPhase(bundleName, userId, appIndex, preloadPhase);
|
||||
}
|
||||
|
||||
int32_t AppMgrClient::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
int32_t AppMgrClient::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground)
|
||||
{
|
||||
if (mgrHolder_ == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "mgrHolder is nullptr.");
|
||||
@@ -1651,7 +1651,7 @@ int32_t AppMgrClient::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "amsService is nullptr.");
|
||||
return ERROR_SERVICE_NOT_CONNECTED;
|
||||
}
|
||||
return amsService->NotifyPreloadAbilityStateChanged(token);
|
||||
return amsService->NotifyPreloadAbilityStateChanged(token, isPreForeground);
|
||||
}
|
||||
|
||||
int32_t AppMgrClient::CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
|
||||
@@ -440,17 +440,17 @@ void ApplicationStateObserverProxy::OnKeepAliveStateChanged(const ProcessData &p
|
||||
}
|
||||
}
|
||||
|
||||
void ApplicationStateObserverProxy::OnPreloadProcessStateChanged(const PreloadProcessData &preloadProcessData)
|
||||
void ApplicationStateObserverProxy::OnProcessPreForegroundChanged(const PreloadProcessData &preloadProcessData)
|
||||
{
|
||||
MessageParcel data;
|
||||
MessageParcel reply;
|
||||
MessageOption option(MessageOption::TF_ASYNC);
|
||||
if (!WriteInterfaceToken(data)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "OnPreloadProcessStateChanged, WriteInterfaceToken failed");
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "OnProcessPreForegroundChanged, WriteInterfaceToken failed");
|
||||
return;
|
||||
}
|
||||
if (!data.WriteParcelable(&preloadProcessData)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "OnPreloadProcessStateChanged write preloadProcessData failed");
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "OnProcessPreForegroundChanged write preloadProcessData failed");
|
||||
return;
|
||||
}
|
||||
int32_t ret = SendTransactCmd(
|
||||
@@ -458,7 +458,7 @@ void ApplicationStateObserverProxy::OnPreloadProcessStateChanged(const PreloadPr
|
||||
data, reply, option);
|
||||
if (ret != NO_ERROR && ret != ERR_INVALID_STUB) {
|
||||
TAG_LOGW(AAFwkTag::APPMGR,
|
||||
"OnPreloadProcessStateChanged ssendRequest is wrong, error code: %{public}d, pid:%{public}d.",
|
||||
"OnProcessPreForegroundChanged ssendRequest is wrong, error code: %{public}d, pid:%{public}d.",
|
||||
ret, preloadProcessData.pid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ int ApplicationStateObserverStub::OnRemoteRequest(
|
||||
case Message::TRANSACT_ON_KEEP_ALIVE_STATE_CHANGED:
|
||||
return HandleOnKeepAliveStateChanged(data, reply);
|
||||
case Message::TRANSACT_ON_PRELOAD_PROCESS_STATE_CHANGED:
|
||||
return HandleOnPreloadProcessStateChanged(data, reply);
|
||||
return HandleOnProcessPreForegroundChanged(data, reply);
|
||||
}
|
||||
TAG_LOGW(AAFwkTag::APPMGR, "ApplicationStateObserverStub::OnRemoteRequest, default case, need check");
|
||||
return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
|
||||
@@ -136,7 +136,7 @@ void ApplicationStateObserverStub::OnProcessBindingRelationChanged(const Process
|
||||
void ApplicationStateObserverStub::OnKeepAliveStateChanged(const ProcessData &processData)
|
||||
{}
|
||||
|
||||
void ApplicationStateObserverStub::OnPreloadProcessStateChanged(const PreloadProcessData &preloadProcessData)
|
||||
void ApplicationStateObserverStub::OnProcessPreForegroundChanged(const PreloadProcessData &preloadProcessData)
|
||||
{}
|
||||
|
||||
int32_t ApplicationStateObserverStub::HandleOnForegroundApplicationChanged(MessageParcel &data, MessageParcel &reply)
|
||||
@@ -379,7 +379,7 @@ int32_t ApplicationStateObserverStub::HandleOnKeepAliveStateChanged(MessageParce
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
int32_t ApplicationStateObserverStub::HandleOnPreloadProcessStateChanged(MessageParcel &data, MessageParcel &reply)
|
||||
int32_t ApplicationStateObserverStub::HandleOnProcessPreForegroundChanged(MessageParcel &data, MessageParcel &reply)
|
||||
{
|
||||
std::unique_ptr<PreloadProcessData> preloadProcessData(data.ReadParcelable<PreloadProcessData>());
|
||||
if (!preloadProcessData) {
|
||||
@@ -387,7 +387,7 @@ int32_t ApplicationStateObserverStub::HandleOnPreloadProcessStateChanged(Message
|
||||
return ERR_APPEXECFWK_PARCEL_ERROR;
|
||||
}
|
||||
|
||||
OnPreloadProcessStateChanged(*preloadProcessData);
|
||||
OnProcessPreForegroundChanged(*preloadProcessData);
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,15 +21,19 @@ namespace OHOS {
|
||||
namespace AppExecFwk {
|
||||
bool PreloadProcessData::ReadFromParcel(Parcel &parcel)
|
||||
{
|
||||
isPreForeground = parcel.ReadBool();
|
||||
pid = parcel.ReadInt32();
|
||||
uid = parcel.ReadInt32();
|
||||
state = parcel.ReadInt32();
|
||||
bundleName = parcel.ReadString();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PreloadProcessData::Marshalling(Parcel &parcel) const
|
||||
{
|
||||
if (!parcel.WriteBool(isPreForeground)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "write isPreForeground failed.");
|
||||
return false;
|
||||
}
|
||||
if (!parcel.WriteInt32(pid)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "write pid failed.");
|
||||
return false;
|
||||
@@ -38,10 +42,6 @@ bool PreloadProcessData::Marshalling(Parcel &parcel) const
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "write uid failed.");
|
||||
return false;
|
||||
}
|
||||
if (!parcel.WriteInt32(state)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "write state failed.");
|
||||
return false;
|
||||
}
|
||||
if (!parcel.WriteString(bundleName)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "write bundleName failed.");
|
||||
return false;
|
||||
|
||||
@@ -49,6 +49,7 @@ bool RunningProcessInfo::ReadFromParcel(Parcel &parcel)
|
||||
isTestMode = parcel.ReadBool();
|
||||
isDebugApp = parcel.ReadBool();
|
||||
isExiting = parcel.ReadBool();
|
||||
isPreForeground = parcel.ReadBool();
|
||||
int32_t bundleTypeData;
|
||||
READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, bundleTypeData);
|
||||
bundleType = static_cast<int32_t>(bundleTypeData);
|
||||
@@ -102,6 +103,7 @@ bool RunningProcessInfo::Marshalling(Parcel &parcel) const
|
||||
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isTestMode);
|
||||
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isDebugApp);
|
||||
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isExiting);
|
||||
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isPreForeground);
|
||||
WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(bundleType));
|
||||
if (!parcel.WriteStringVector(bundleNames)) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "write bundleNames failed.");
|
||||
|
||||
@@ -1266,6 +1266,16 @@ public:
|
||||
return isPreloaded_.load();
|
||||
}
|
||||
|
||||
inline void SetFrozenByPreload(bool isFrozenByPreload)
|
||||
{
|
||||
isFrozenByPreload_.store(isFrozenByPreload);
|
||||
}
|
||||
|
||||
inline bool IsFrozenByPreload() const
|
||||
{
|
||||
return isFrozenByPreload_.load();
|
||||
}
|
||||
|
||||
void SendEvent(uint32_t msg, uint32_t timeOut, int32_t param = -1, bool isExtension = false,
|
||||
const std::string &taskName = "");
|
||||
|
||||
@@ -1508,6 +1518,7 @@ private:
|
||||
std::atomic_bool isLastWantBackgroundDriven_ = false;
|
||||
std::atomic<int32_t> scenarios_ = 0;
|
||||
std::atomic<bool> isPreloaded_ = false;
|
||||
std::atomic<bool> isFrozenByPreload_ = false;
|
||||
};
|
||||
} // namespace AAFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -616,7 +616,7 @@ public:
|
||||
int32_t PreloadApplicationByPhase(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
AppExecFwk::PreloadPhase preloadPhase);
|
||||
|
||||
int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token);
|
||||
int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground);
|
||||
|
||||
int32_t CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex, bool &isExist);
|
||||
|
||||
|
||||
@@ -31,10 +31,6 @@ public:
|
||||
static bool IsHiddenStart(const StartOptions &options);
|
||||
|
||||
static int32_t CheckHiddenStartSupported(const StartOptions &options);
|
||||
|
||||
static bool IsPreloadStart(const StartOptions &options);
|
||||
|
||||
static int32_t CheckPreloadStartSupported();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1782,8 +1782,6 @@ int AbilityManagerService::StartUIAbilityForOptionWrap(const Want &want, const S
|
||||
options.processOptions != nullptr &&
|
||||
options.processOptions->isStartFromNDK) {
|
||||
ret = CheckStartSelfUIAbilityStartOptions(want, options);
|
||||
} else if (HiddenStartUtils::IsPreloadStart(options)) {
|
||||
ret = HiddenStartUtils::CheckPreloadStartSupported();
|
||||
} else {
|
||||
ret = CheckProcessOptions(want, options, userId);
|
||||
}
|
||||
|
||||
@@ -502,6 +502,12 @@ void AbilityRecord::ProcessForegroundAbility(uint32_t tokenId, uint32_t sceneFla
|
||||
PostForegroundTimeoutTask();
|
||||
if (IsAbilityState(AbilityState::FOREGROUND)) {
|
||||
TAG_LOGD(AAFwkTag::ABILITYMGR, "Activate %{public}s", element.c_str());
|
||||
if (IsFrozenByPreload()) {
|
||||
SetFrozenByPreload(false);
|
||||
auto ret =
|
||||
DelayedSingleton<AppScheduler>::GetInstance()->NotifyPreloadAbilityStateChanged(token_, false);
|
||||
TAG_LOGI(AAFwkTag::ABILITYMGR, "NotifyPreloadAbilityStateChanged by start, ret: %{public}d", ret);
|
||||
}
|
||||
ForegroundAbility(sceneFlag);
|
||||
} else {
|
||||
// background to active state
|
||||
|
||||
@@ -750,14 +750,14 @@ int32_t AppScheduler::PreloadApplicationByPhase(const std::string &bundleName, i
|
||||
return IN_PROCESS_CALL(appMgrClient_->PreloadApplicationByPhase(bundleName, userId, appIndex, preloadPhase));
|
||||
}
|
||||
|
||||
int32_t AppScheduler::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
int32_t AppScheduler::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground)
|
||||
{
|
||||
HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
|
||||
if (appMgrClient_ == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "null appMgrClient");
|
||||
return INNER_ERR;
|
||||
}
|
||||
return IN_PROCESS_CALL(appMgrClient_->NotifyPreloadAbilityStateChanged(token));
|
||||
return IN_PROCESS_CALL(appMgrClient_->NotifyPreloadAbilityStateChanged(token, isPreForeground));
|
||||
}
|
||||
|
||||
int32_t AppScheduler::CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
|
||||
@@ -539,7 +539,8 @@ int UIAbilityLifecycleManager::AbilityTransactionDone(const sptr<IRemoteObject>
|
||||
if (state == AbilityLifeCycleState::ABILITY_STATE_FOREGROUND_NEW &&
|
||||
abilityRecord->IsPreloadStart() && !abilityRecord->IsPreloaded()) {
|
||||
abilityRecord->SetPreloaded();
|
||||
auto ret = DelayedSingleton<AppScheduler>::GetInstance()->NotifyPreloadAbilityStateChanged(token);
|
||||
abilityRecord->SetFrozenByPreload(true);
|
||||
auto ret = DelayedSingleton<AppScheduler>::GetInstance()->NotifyPreloadAbilityStateChanged(token, true);
|
||||
TAG_LOGI(AAFwkTag::ABILITYMGR, "NotifyPreloadAbilityStateChanged ret: %{public}d", ret);
|
||||
}
|
||||
abilityRecord->RemoveSignatureInfo();
|
||||
|
||||
@@ -26,7 +26,8 @@ namespace OHOS {
|
||||
namespace AAFwk {
|
||||
bool HiddenStartUtils::IsHiddenStart(const StartOptions &options)
|
||||
{
|
||||
if (!PermissionVerification::GetInstance()->VerifyStartUIAbilityToHiddenPermission()) {
|
||||
if (!PermissionVerification::GetInstance()->VerifyStartUIAbilityToHiddenPermission() &&
|
||||
!PermissionVerification::GetInstance()->VerifyPreloadApplicationPermission()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -41,48 +42,23 @@ bool HiddenStartUtils::IsHiddenStart(const StartOptions &options)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HiddenStartUtils::IsPreloadStart(const StartOptions &options)
|
||||
{
|
||||
if (!PermissionVerification::GetInstance()->VerifyPreloadApplicationPermission()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options.processOptions == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options.processOptions->startupVisibility != OHOS::AAFwk::StartupVisibility::STARTUP_HIDE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return options.processOptions->isPreloadStart;
|
||||
}
|
||||
|
||||
int32_t HiddenStartUtils::CheckHiddenStartSupported(const StartOptions &options)
|
||||
{
|
||||
if (!AppUtils::GetInstance().IsStartOptionsWithAnimation()) {
|
||||
if (!AppUtils::GetInstance().IsStartOptionsWithAnimation() &&
|
||||
!AppUtils::GetInstance().IsPreloadApplicationEnabled()) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "start ability silently is not supported in this device");
|
||||
return ERR_NOT_SUPPORTED_PRODUCT_TYPE;
|
||||
}
|
||||
|
||||
if (options.processOptions == nullptr ||
|
||||
(!ProcessOptions::IsNewHiddenProcessMode(options.processOptions->processMode) &&
|
||||
!ProcessOptions::IsNoAttachmentMode(options.processOptions->processMode))) {
|
||||
!ProcessOptions::IsNoAttachmentMode(options.processOptions->processMode) &&
|
||||
!options.processOptions->isPreloadStart)) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "this processMode is not supported in hidden start");
|
||||
return ERR_INVALID_VALUE;
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
int32_t HiddenStartUtils::CheckPreloadStartSupported()
|
||||
{
|
||||
if (!AppUtils::GetInstance().IsPreloadApplicationEnabled()) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "preload is not supported");
|
||||
return ERR_NOT_SUPPORTED_PRODUCT_TYPE;
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -464,7 +464,7 @@ public:
|
||||
virtual int32_t PreloadApplicationByPhase(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
AppExecFwk::PreloadPhase preloadPhase) override;
|
||||
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token) override;
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground) override;
|
||||
|
||||
virtual int32_t CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
bool &isExist) override;
|
||||
|
||||
@@ -255,7 +255,7 @@ public:
|
||||
virtual int32_t PreloadApplication(const std::string &bundleName, int32_t userId,
|
||||
AppExecFwk::PreloadMode preloadMode, int32_t appIndex);
|
||||
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token);
|
||||
virtual int32_t NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground);
|
||||
|
||||
/**
|
||||
* Launch Application Finished
|
||||
|
||||
@@ -735,6 +735,8 @@ public:
|
||||
void SendAppStartupTypeEvent(const std::shared_ptr<AbilityRunningRecord> &ability, const AppStartType startType);
|
||||
void SetKilling();
|
||||
bool IsKilling() const;
|
||||
void SetPreForeground(bool isPreForeground);
|
||||
bool IsPreForeground() const;
|
||||
void SetAppIndex(const int32_t appIndex);
|
||||
int32_t GetAppIndex() const;
|
||||
void SetInstanceKey(const std::string& instanceKey);
|
||||
@@ -1216,6 +1218,7 @@ private:
|
||||
bool isExtensionSandBox_ = false;
|
||||
std::atomic<bool> isKilling_ = false;
|
||||
std::atomic_bool isSpawned_ = false;
|
||||
std::atomic<bool> isPreForeground_ = false;
|
||||
|
||||
int32_t appRecordId_ = 0;
|
||||
int32_t mainUid_;
|
||||
|
||||
@@ -90,7 +90,7 @@ public:
|
||||
void OnPageHide(const PageStateData pageStateData);
|
||||
void OnAppCacheStateChanged(const std::shared_ptr<AppRunningRecord> &appRecord, ApplicationState state);
|
||||
void OnKeepAliveStateChanged(const std::shared_ptr<AppRunningRecord> &appRecord);
|
||||
void OnPreloadProcessStateChanged(std::shared_ptr<AppRunningRecord> appRecord, ApplicationState state);
|
||||
void OnProcessPreForegroundChanged(std::shared_ptr<AppRunningRecord> appRecord);
|
||||
|
||||
private:
|
||||
void HandleOnWindowShow(const std::shared_ptr<AppRunningRecord> &appRecord);
|
||||
@@ -140,7 +140,7 @@ private:
|
||||
void HandleOnProcessBindingRelationChanged(const std::shared_ptr<AppRunningRecord> &appRecord,
|
||||
const UIExtensionProcessBindInfo &bindInfo, int32_t bindingRelation);
|
||||
void HandleOnKeepAliveStateChanged(const std::shared_ptr<AppRunningRecord> &appRecord);
|
||||
void HandleOnPreloadProcessStateChanged(std::shared_ptr<AppRunningRecord> appRecord, ApplicationState state);
|
||||
void HandleOnProcessPreForegroundChanged(std::shared_ptr<AppRunningRecord> appRecord);
|
||||
|
||||
private:
|
||||
std::shared_ptr<AAFwk::TaskHandlerWrap> handler_;
|
||||
|
||||
@@ -851,7 +851,7 @@ int32_t AmsMgrScheduler::PreloadApplicationByPhase(const std::string &bundleName
|
||||
return amsMgrServiceInner_->PreloadApplicationByPhase(bundleName, userId, appIndex, preloadPhase);
|
||||
}
|
||||
|
||||
int32_t AmsMgrScheduler::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
int32_t AmsMgrScheduler::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground)
|
||||
{
|
||||
if (!IsReady()) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "appMgrServiceInner is not ready.");
|
||||
@@ -861,7 +861,7 @@ int32_t AmsMgrScheduler::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> to
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "Not foundation call.");
|
||||
return ERR_PERMISSION_DENIED;
|
||||
}
|
||||
return amsMgrServiceInner_->NotifyPreloadAbilityStateChanged(token);
|
||||
return amsMgrServiceInner_->NotifyPreloadAbilityStateChanged(token, isPreForeground);
|
||||
}
|
||||
|
||||
int32_t AmsMgrScheduler::CheckPreloadAppRecordExist(const std::string &bundleName, int32_t userId, int32_t appIndex,
|
||||
|
||||
@@ -748,7 +748,7 @@ void AppMgrServiceInner::reportpreLoadTask(const std::shared_ptr<AppRunningRecor
|
||||
}
|
||||
}
|
||||
|
||||
int32_t AppMgrServiceInner::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token)
|
||||
int32_t AppMgrServiceInner::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject> token, bool isPreForeground)
|
||||
{
|
||||
HITRACE_METER_NAME(HITRACE_TAG_APP, __PRETTY_FUNCTION__);
|
||||
TAG_LOGD(AAFwkTag::APPMGR, "NotifyPreloadAbilityStateChanged");
|
||||
@@ -761,10 +761,21 @@ int32_t AppMgrServiceInner::NotifyPreloadAbilityStateChanged(sptr<IRemoteObject>
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "appRecord not exist");
|
||||
return ERR_NULL_OBJECT;
|
||||
}
|
||||
TAG_LOGI(AAFwkTag::APPMGR, "NotifyPreloadAbilityStateChanged bundle:%{public}s, pid:%{public}d",
|
||||
appRecord->GetBundleName().c_str(), appRecord->GetPid());
|
||||
DelayedSingleton<AppStateObserverManager>::GetInstance()->OnPreloadProcessStateChanged(appRecord,
|
||||
ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
if (appRecord->IsPreForeground() == isPreForeground) {
|
||||
TAG_LOGI(AAFwkTag::APPMGR,"NotifyPreloadAbilityStateChanged, pid:%{public}d, isPreForeground Same:%{public}d",
|
||||
appRecord->GetPid(), isPreForeground);
|
||||
return AAFwk::ERR_NOTIFY_PRELOAD_ABILITY_NO_CHANGE;
|
||||
}
|
||||
if (isPreForeground && appRecord->GetAbilities().size() > 1) {
|
||||
TAG_LOGI(AAFwkTag::APPMGR,"NotifyPreloadAbilityStateChanged, has other ability, pid:%{public}d",
|
||||
appRecord->GetPid());
|
||||
return AAFwk::ERR_NOTIFY_PRELOAD_ABILITY_HAS_OTHER;
|
||||
}
|
||||
TAG_LOGI(AAFwkTag::APPMGR,
|
||||
"NotifyPreloadAbilityStateChanged bundle:%{public}s, pid:%{public}d, isPreForeground:%{public}d",
|
||||
appRecord->GetBundleName().c_str(), appRecord->GetPid(), isPreForeground);
|
||||
appRecord->SetPreForeground(isPreForeground);
|
||||
DelayedSingleton<AppStateObserverManager>::GetInstance()->OnProcessPreForegroundChanged(appRecord);
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
@@ -2880,6 +2891,7 @@ void AppMgrServiceInner::GetRunningProcess(const std::shared_ptr<AppRunningRecor
|
||||
info.isDebugApp = appRecord->IsDebug();
|
||||
info.isExiting = appRecord->IsTerminating() || appRecord->IsKilling()
|
||||
|| appRecord->GetRestartAppFlag() || appRecord->IsUserRequestCleaning();
|
||||
info.isPreForeground = appRecord->IsPreForeground();
|
||||
info.isCached = DelayedSingleton<CacheProcessManager>::GetInstance()->IsCachedProcess(appRecord);
|
||||
if (appRecord->GetUserTestInfo() != nullptr && system::GetBoolParameter(DEVELOPER_MODE_STATE, false)) {
|
||||
info.isTestMode = true;
|
||||
@@ -3177,18 +3189,15 @@ void AppMgrServiceInner::UpdateAbilityState(const sptr<IRemoteObject> &token, co
|
||||
{
|
||||
HITRACE_METER_NAME(HITRACE_TAG_APP, __PRETTY_FUNCTION__);
|
||||
TAG_LOGD(AAFwkTag::APPMGR, "state %{public}d.", static_cast<int32_t>(state));
|
||||
if (!token) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "token null");
|
||||
return;
|
||||
}
|
||||
|
||||
CHECK_POINTER_AND_RETURN_LOG(token, "token null");
|
||||
if (state == AbilityState::ABILITY_STATE_FOREGROUND) {
|
||||
AbilityRuntime::FreezeUtil::GetInstance().AppendLifecycleEvent(token, "ServiceInner::UpdateAbilityState");
|
||||
}
|
||||
auto appRecord = GetAppRunningRecordByAbilityToken(token);
|
||||
if (!appRecord) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "app unexist");
|
||||
return;
|
||||
CHECK_POINTER_AND_RETURN_LOG(appRecord, "app unexist");
|
||||
if (appRecord->IsPreForeground() && state == AbilityState::ABILITY_STATE_FOREGROUND) {
|
||||
appRecord->SetPreForeground(false);
|
||||
DelayedSingleton<AppStateObserverManager>::GetInstance()->OnProcessPreForegroundChanged(appRecord);
|
||||
}
|
||||
auto abilityRecord = appRecord->GetAbilityRunningRecordByToken(token);
|
||||
if (!abilityRecord) {
|
||||
|
||||
@@ -1891,6 +1891,16 @@ bool AppRunningRecord::IsKilling() const
|
||||
return isKilling_.load();
|
||||
}
|
||||
|
||||
void AppRunningRecord::SetPreForeground(bool isPreForeground)
|
||||
{
|
||||
isPreForeground_.store(isPreForeground);
|
||||
}
|
||||
|
||||
bool AppRunningRecord::IsPreForeground() const
|
||||
{
|
||||
return isPreForeground_.load();
|
||||
}
|
||||
|
||||
bool AppRunningRecord::NeedUpdateConfigurationBackground()
|
||||
{
|
||||
bool needUpdate = false;
|
||||
|
||||
@@ -1364,11 +1364,10 @@ void AppStateObserverManager::HandleOnKeepAliveStateChanged(const std::shared_pt
|
||||
}
|
||||
}
|
||||
|
||||
void AppStateObserverManager::OnPreloadProcessStateChanged(std::shared_ptr<AppRunningRecord> appRecord,
|
||||
ApplicationState state)
|
||||
void AppStateObserverManager::OnProcessPreForegroundChanged(std::shared_ptr<AppRunningRecord> appRecord)
|
||||
{
|
||||
HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
|
||||
TAG_LOGI(AAFwkTag::APPMGR, "OnPreloadProcessStateChanged");
|
||||
TAG_LOGI(AAFwkTag::APPMGR, "OnProcessPreForegroundChanged");
|
||||
if (!appRecord) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "null appRecord");
|
||||
return;
|
||||
@@ -1378,20 +1377,19 @@ void AppStateObserverManager::OnPreloadProcessStateChanged(std::shared_ptr<AppRu
|
||||
return;
|
||||
}
|
||||
|
||||
auto task = [weak = weak_from_this(), appRecord, state]() {
|
||||
auto task = [weak = weak_from_this(), appRecord]() {
|
||||
auto self = weak.lock();
|
||||
if (self == nullptr) {
|
||||
TAG_LOGE(AAFwkTag::APPMGR, "null self");
|
||||
return;
|
||||
}
|
||||
TAG_LOGD(AAFwkTag::APPMGR, "OnPreloadProcessStateChanged task.");
|
||||
self->HandleOnPreloadProcessStateChanged(appRecord, state);
|
||||
TAG_LOGD(AAFwkTag::APPMGR, "OnProcessPreForegroundChanged task.");
|
||||
self->HandleOnProcessPreForegroundChanged(appRecord);
|
||||
};
|
||||
handler_->SubmitTask(task);
|
||||
}
|
||||
|
||||
void AppStateObserverManager::HandleOnPreloadProcessStateChanged(
|
||||
std::shared_ptr<AppRunningRecord> appRecord, ApplicationState state)
|
||||
void AppStateObserverManager::HandleOnProcessPreForegroundChanged(std::shared_ptr<AppRunningRecord> appRecord)
|
||||
{
|
||||
HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
|
||||
if (appRecord == nullptr) {
|
||||
@@ -1401,20 +1399,20 @@ void AppStateObserverManager::HandleOnPreloadProcessStateChanged(
|
||||
|
||||
auto bundleName = appRecord->GetBundleName();
|
||||
PreloadProcessData preloadProcessData;
|
||||
preloadProcessData.isPreForeground = appRecord->IsPreForeground();
|
||||
preloadProcessData.pid = appRecord->GetPid();
|
||||
preloadProcessData.uid = appRecord->GetUid();
|
||||
preloadProcessData.state = static_cast<int32_t>(state);
|
||||
preloadProcessData.bundleName = bundleName;
|
||||
|
||||
TAG_LOGI(AAFwkTag::APPMGR,
|
||||
"HandleOnPreloadProcessStateChanged, pid:%{public}d, bundle:%{public}s, uid:%{public}d, state:%{public}d",
|
||||
preloadProcessData.pid, bundleName.c_str(), preloadProcessData.uid, preloadProcessData.state);
|
||||
"HandleOnProcessPreForegroundChanged, pid:%{public}d, bundle:%{public}s, uid:%{public}d, isPreFore:%{public}d",
|
||||
preloadProcessData.pid, bundleName.c_str(), preloadProcessData.uid, preloadProcessData.isPreForeground);
|
||||
auto appStateObserverMapCopy = GetAppStateObserverMapCopy();
|
||||
for (auto it = appStateObserverMapCopy.begin(); it != appStateObserverMapCopy.end(); ++it) {
|
||||
const auto &bundleNames = it->second.bundleNames;
|
||||
auto iter = std::find(bundleNames.begin(), bundleNames.end(), bundleName);
|
||||
if ((bundleNames.empty() || iter != bundleNames.end()) && it->first != nullptr) {
|
||||
it->first->OnPreloadProcessStateChanged(preloadProcessData);
|
||||
it->first->OnProcessPreForegroundChanged(preloadProcessData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public:
|
||||
MOCK_METHOD2(DumpHeapMemory, int32_t(const int32_t pid, OHOS::AppExecFwk::MallocInfo &mallocInfo));
|
||||
MOCK_METHOD1(GetProcessRunningInformation, int32_t(RunningProcessInfo &info));
|
||||
MOCK_METHOD4(PreloadApplicationByPhase, int32_t(const std::string&, int32_t, int32_t, AppExecFwk::PreloadPhase));
|
||||
MOCK_METHOD1(NotifyPreloadAbilityStateChanged, int32_t(sptr<IRemoteObject>));
|
||||
MOCK_METHOD2(NotifyPreloadAbilityStateChanged, int32_t(sptr<IRemoteObject>, bool));
|
||||
MOCK_METHOD3(CheckPreloadAppRecordExist, bool(const std::string&, int32_t, int32_t));
|
||||
MOCK_CONST_METHOD0(IsFoundationCall, bool());
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
MOCK_METHOD4(SendRequest, int(uint32_t, MessageParcel&, MessageParcel&, MessageOption&));
|
||||
MOCK_METHOD4(PreloadApplicationByPhase, int32_t(const std::string&, int32_t, int32_t, AppExecFwk::PreloadPhase));
|
||||
MOCK_METHOD1(NotifyPreloadAbilityStateChanged, int32_t(sptr<IRemoteObject>));
|
||||
MOCK_METHOD2(NotifyPreloadAbilityStateChanged, int32_t(sptr<IRemoteObject>, bool));
|
||||
MOCK_METHOD4(CheckPreloadAppRecordExist, int32_t(const std::string&, int32_t, int32_t, bool &));
|
||||
|
||||
int InvokeSendRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option)
|
||||
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
int32_t childProcessCount, const sptr<IRemoteObject> &callback, const std::string &customProcessName));
|
||||
#endif // SUPPORT_CHILD_PROCESS
|
||||
MOCK_METHOD4(PreloadApplicationByPhase, int32_t(const std::string&, int32_t, int32_t, AppExecFwk::PreloadPhase));
|
||||
MOCK_METHOD1(NotifyPreloadAbilityStateChanged, int32_t(sptr<IRemoteObject>));
|
||||
MOCK_METHOD2(NotifyPreloadAbilityStateChanged, int32_t(sptr<IRemoteObject>, bool));
|
||||
MOCK_METHOD3(CheckPreloadAppRecordExist, bool(const std::string&, int32_t, int32_t));
|
||||
MOCK_CONST_METHOD0(IsFoundationCall, bool());
|
||||
|
||||
|
||||
@@ -3264,5 +3264,25 @@ HWTEST_F(AbilityRecordTest, AbilityRecord_ProcessForegroundAbility_002, TestSize
|
||||
abilityRecord_->ProcessForegroundAbility(tokenId);
|
||||
EXPECT_EQ(abilityRecord_->lifeCycleStateInfo_.sceneFlagBak, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AbilityRecord
|
||||
* Function: ProcessForegroundAbility
|
||||
* SubFunction: ProcessForegroundAbility
|
||||
* FunctionPoints: NA
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify AbilityRecord ProcessForegroundAbility
|
||||
*/
|
||||
HWTEST_F(AbilityRecordTest, AbilityRecord_ProcessForegroundAbility_003, TestSize.Level1)
|
||||
{
|
||||
EXPECT_NE(abilityRecord_, nullptr);
|
||||
uint32_t tokenId = 0;
|
||||
abilityRecord_->isReady_ = true;
|
||||
abilityRecord_->currentState_ = AbilityState::FOREGROUND;
|
||||
abilityRecord_->pid_ = pid_;
|
||||
abilityRecord_->SetFrozenByPreload(true);
|
||||
abilityRecord_->ProcessForegroundAbility(tokenId);
|
||||
EXPECT_EQ(abilityRecord_->IsFrozenByPreload(), false);
|
||||
}
|
||||
} // namespace AAFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -638,7 +638,7 @@ HWTEST_F(AmsAppMgrClientTest, NotifyPreloadAbilityStateChanged_001, TestSize.Lev
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_001 start");
|
||||
client_->mgrHolder_ = nullptr;
|
||||
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_);
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_, true);
|
||||
EXPECT_EQ(result, AppMgrResultCode::ERROR_SERVICE_NOT_CONNECTED);
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_001 end");
|
||||
}
|
||||
@@ -656,7 +656,7 @@ HWTEST_F(AmsAppMgrClientTest, NotifyPreloadAbilityStateChanged_002, TestSize.Lev
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_002 start");
|
||||
client_->SetServiceManager(nullptr);
|
||||
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_);
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_, true);
|
||||
EXPECT_EQ(result, AppMgrResultCode::ERROR_SERVICE_NOT_CONNECTED);
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_002 end");
|
||||
}
|
||||
@@ -680,7 +680,7 @@ HWTEST_F(AmsAppMgrClientTest, NotifyPreloadAbilityStateChanged_003, TestSize.Lev
|
||||
.Times(1)
|
||||
.WillOnce(Return(amsMgrScheduler));
|
||||
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_);
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_, true);
|
||||
EXPECT_EQ(result, AppMgrResultCode::ERROR_SERVICE_NOT_CONNECTED);
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_003 end");
|
||||
}
|
||||
@@ -704,11 +704,11 @@ HWTEST_F(AmsAppMgrClientTest, NotifyPreloadAbilityStateChanged_004, TestSize.Lev
|
||||
.Times(1)
|
||||
.WillOnce(Return(mockAmsMgrScheduler));
|
||||
|
||||
EXPECT_CALL(*mockAmsMgrScheduler, NotifyPreloadAbilityStateChanged(_))
|
||||
EXPECT_CALL(*mockAmsMgrScheduler, NotifyPreloadAbilityStateChanged(_, _))
|
||||
.Times(1)
|
||||
.WillOnce(Return(AppMgrResultCode::RESULT_OK));
|
||||
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_);
|
||||
int32_t result = client_->NotifyPreloadAbilityStateChanged(token_, true);
|
||||
EXPECT_EQ(result, ERR_OK);
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_004 end");
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ HWTEST_F(AmsMgrProxyTest, NotifyPreloadAbilityStateChanged_0100, TestSize.Level1
|
||||
GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0100 start";
|
||||
ASSERT_NE(amsMgrProxy_, nullptr);
|
||||
|
||||
auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(nullptr);
|
||||
auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(nullptr, true);
|
||||
EXPECT_EQ(result, AAFwk::INVALID_CALLER_TOKEN);
|
||||
GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0100 end";
|
||||
}
|
||||
@@ -252,7 +252,7 @@ HWTEST_F(AmsMgrProxyTest, NotifyPreloadAbilityStateChanged_0200, TestSize.Level1
|
||||
.WillOnce(Return(ERR_NULL_OBJECT));
|
||||
|
||||
sptr<IRemoteObject> token = new (std::nothrow) MockAbilityToken();
|
||||
auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(token);
|
||||
auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(token, true);
|
||||
EXPECT_EQ(result, ERR_NULL_OBJECT);
|
||||
GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0200 end";
|
||||
}
|
||||
@@ -272,7 +272,7 @@ HWTEST_F(AmsMgrProxyTest, NotifyPreloadAbilityStateChanged_0300, TestSize.Level1
|
||||
.WillOnce(Return(ERR_OK));
|
||||
|
||||
sptr<IRemoteObject> token = new (std::nothrow) MockAbilityToken();
|
||||
auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(token);
|
||||
auto result = amsMgrProxy_->NotifyPreloadAbilityStateChanged(token, true);
|
||||
EXPECT_EQ(result, ERR_OK);
|
||||
GTEST_LOG_(INFO) << "NotifyPreloadAbilityStateChanged_0300 end";
|
||||
}
|
||||
|
||||
@@ -2358,7 +2358,7 @@ HWTEST_F(AmsMgrSchedulerSecondTest, NotifyPreloadAbilityStateChanged_001, TestSi
|
||||
std::shared_ptr<AmsMgrScheduler> amsMgrScheduler =
|
||||
std::make_shared<AmsMgrScheduler>(nullptr, nullptr);
|
||||
|
||||
int32_t ret = amsMgrScheduler->NotifyPreloadAbilityStateChanged(nullptr);
|
||||
int32_t ret = amsMgrScheduler->NotifyPreloadAbilityStateChanged(nullptr, true);
|
||||
EXPECT_EQ(ret, AAFwk::ERR_APP_MGR_SERVICE_NOT_READY);
|
||||
TAG_LOGI(AAFwkTag::TEST, "AmsMgrSchedulerSecondTest_NotifyPreloadAbilityStateChanged_001 end");
|
||||
}
|
||||
@@ -2376,7 +2376,7 @@ HWTEST_F(AmsMgrSchedulerSecondTest, NotifyPreloadAbilityStateChanged_002, TestSi
|
||||
|
||||
std::shared_ptr<AmsMgrScheduler> amsMgrScheduler =
|
||||
std::make_shared<AmsMgrScheduler>(appMgrServiceInner, taskHandler_);
|
||||
int32_t ret = amsMgrScheduler->NotifyPreloadAbilityStateChanged(nullptr);
|
||||
int32_t ret = amsMgrScheduler->NotifyPreloadAbilityStateChanged(nullptr, true);
|
||||
EXPECT_EQ(ret, ERR_PERMISSION_DENIED);
|
||||
TAG_LOGI(AAFwkTag::TEST, "AmsMgrSchedulerSecondTest_NotifyPreloadAbilityStateChanged_002 end");
|
||||
}
|
||||
@@ -2391,11 +2391,11 @@ HWTEST_F(AmsMgrSchedulerSecondTest, NotifyPreloadAbilityStateChanged_003, TestSi
|
||||
TAG_LOGI(AAFwkTag::TEST, "AmsMgrSchedulerSecondTest_NotifyPreloadAbilityStateChanged_003 start");
|
||||
auto appMgrServiceInner = std::make_shared<MockAppMgrServiceInner>();
|
||||
EXPECT_CALL(*appMgrServiceInner, IsFoundationCall()).WillOnce(Return(true));
|
||||
EXPECT_CALL(*appMgrServiceInner, NotifyPreloadAbilityStateChanged(_)).WillOnce(Return(ERR_OK));
|
||||
EXPECT_CALL(*appMgrServiceInner, NotifyPreloadAbilityStateChanged(_, _)).WillOnce(Return(ERR_OK));
|
||||
|
||||
std::shared_ptr<AmsMgrScheduler> amsMgrScheduler =
|
||||
std::make_shared<AmsMgrScheduler>(appMgrServiceInner, taskHandler_);
|
||||
int32_t ret = amsMgrScheduler->NotifyPreloadAbilityStateChanged(nullptr);
|
||||
int32_t ret = amsMgrScheduler->NotifyPreloadAbilityStateChanged(nullptr, true);
|
||||
EXPECT_EQ(ret, ERR_OK);
|
||||
TAG_LOGI(AAFwkTag::TEST, "AmsMgrSchedulerSecondTest_NotifyPreloadAbilityStateChanged_003 end");
|
||||
}
|
||||
|
||||
@@ -1240,5 +1240,15 @@ void AppRunningRecord::SetDebugFromLocal(bool isDebugFromLocal)
|
||||
{
|
||||
isDebugFromLocal_ = isDebugFromLocal;
|
||||
}
|
||||
|
||||
void AppRunningRecord::SetPreForeground(bool isPreForeground)
|
||||
{
|
||||
isPreForeground_.store(isPreForeground);
|
||||
}
|
||||
|
||||
bool AppRunningRecord::IsPreForeground() const
|
||||
{
|
||||
return isPreForeground_.load();
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -1270,5 +1270,15 @@ void AppRunningRecord::SetSupportMultiProcessDeviceFeature(bool support)
|
||||
{
|
||||
supportMultiProcessDeviceFeature_ = support;
|
||||
}
|
||||
|
||||
void AppRunningRecord::SetPreForeground(bool isPreForeground)
|
||||
{
|
||||
isPreForeground_.store(isPreForeground);
|
||||
}
|
||||
|
||||
bool AppRunningRecord::IsPreForeground() const
|
||||
{
|
||||
return isPreForeground_.load();
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -219,6 +219,7 @@ public:
|
||||
int getCallingPid_ = 0;
|
||||
bool setAssertionPauseFlagCalled_ = false;
|
||||
bool getAbilitiesCalled_ = false;
|
||||
std::map<const sptr<IRemoteObject>, std::shared_ptr<AppExecFwk::AbilityRunningRecord>> abilitiesMap_;
|
||||
bool notifyAppPreCacheCalled_ = false;
|
||||
bool notifyStartResidentProcessCalled_ = false;
|
||||
bool notifyStartKeepAliveProcessCalled_ = false;
|
||||
@@ -286,6 +287,7 @@ public:
|
||||
resetRunningRecordFunctionFlagExtend();
|
||||
setAssertionPauseFlagCalled_ = false;
|
||||
getAbilitiesCalled_ = false;
|
||||
abilitiesMap_.clear();
|
||||
notifyAppPreCacheCalled_ = false;
|
||||
notifyStartResidentProcessCalled_ = false;
|
||||
notifyStartKeepAliveProcessCalled_ = false;
|
||||
|
||||
+11
-2
@@ -175,8 +175,7 @@ const std::string &AppRunningRecord::GetAppIdentifier() const
|
||||
const std::map<const sptr<IRemoteObject>, std::shared_ptr<AbilityRunningRecord>> AppRunningRecord::GetAbilities()
|
||||
{
|
||||
AAFwk::MyStatus::GetInstance().getAbilitiesCalled_ = true;
|
||||
std::map<const sptr<IRemoteObject>, std::shared_ptr<AbilityRunningRecord>> abilitiesMap;
|
||||
return abilitiesMap;
|
||||
return AAFwk::MyStatus::GetInstance().abilitiesMap_;
|
||||
}
|
||||
|
||||
sptr<IAppScheduler> AppRunningRecord::GetApplicationClient() const
|
||||
@@ -1343,5 +1342,15 @@ void AppRunningRecord::SetKeepAliveAppService(bool isKeepAliveAppService)
|
||||
{
|
||||
isKeepAliveAppService_ = isKeepAliveAppService;
|
||||
}
|
||||
|
||||
void AppRunningRecord::SetPreForeground(bool isPreForeground)
|
||||
{
|
||||
isPreForeground_.store(isPreForeground);
|
||||
}
|
||||
|
||||
bool AppRunningRecord::IsPreForeground() const
|
||||
{
|
||||
return isPreForeground_.load();
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -1748,6 +1748,46 @@ HWTEST_F(AppMgrServiceInnerSecondTest, UpdateAbilityState_001, TestSize.Level1)
|
||||
TAG_LOGI(AAFwkTag::TEST, "UpdateAbilityState_001 end");
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: UpdateAbilityState_002
|
||||
* @tc.desc: update ability state.
|
||||
* @tc.type: FUNC
|
||||
* @tc.require: issueI5W4S7
|
||||
*/
|
||||
HWTEST_F(AppMgrServiceInnerSecondTest, UpdateAbilityState_002, TestSize.Level1)
|
||||
{
|
||||
TAG_LOGI(AAFwkTag::TEST, "UpdateAbilityState_002 start");
|
||||
auto appMgrServiceInner = std::make_shared<AppMgrServiceInner>();
|
||||
EXPECT_NE(appMgrServiceInner, nullptr);
|
||||
|
||||
|
||||
BundleInfo bundleInfo;
|
||||
HapModuleInfo hapModuleInfo;
|
||||
std::shared_ptr<AAFwk::Want> want;
|
||||
std::string processName = "test_processName";
|
||||
auto loadParam = std::make_shared<AbilityRuntime::LoadParam>();
|
||||
OHOS::sptr<IRemoteObject> token = sptr<IRemoteObject>(new (std::nothrow) MockAbilityToken());
|
||||
loadParam->token = token;
|
||||
std::shared_ptr<AppRunningRecord> appRecord = appMgrServiceInner->CreateAppRunningRecord(loadParam,
|
||||
applicationInfo_, nullptr, processName, bundleInfo, hapModuleInfo, want);
|
||||
ASSERT_NE(appRecord, nullptr);
|
||||
appRecord->AddModule(applicationInfo_, abilityInfo_, token, hapModuleInfo, nullptr, 0);
|
||||
|
||||
appRecord->SetPreForeground(false);
|
||||
appMgrServiceInner->UpdateAbilityState(token, AbilityState::ABILITY_STATE_FOREGROUND);
|
||||
EXPECT_EQ(appRecord->IsPreForeground(), false);
|
||||
|
||||
appRecord->SetPreForeground(true);
|
||||
appMgrServiceInner->UpdateAbilityState(token, AbilityState::ABILITY_STATE_CREATE);
|
||||
EXPECT_EQ(appRecord->IsPreForeground(), true);
|
||||
|
||||
appRecord->SetPreForeground(true);
|
||||
appMgrServiceInner->UpdateAbilityState(token, AbilityState::ABILITY_STATE_FOREGROUND);
|
||||
EXPECT_EQ(appRecord->IsPreForeground(), false);
|
||||
|
||||
TAG_LOGI(AAFwkTag::TEST, "UpdateAbilityState_002 end");
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: KillProcessByAbilityToken_001
|
||||
* @tc.desc: kill process by ability token.
|
||||
|
||||
@@ -1270,5 +1270,15 @@ void AppRunningRecord::SetSupportMultiProcessDeviceFeature(bool support)
|
||||
{
|
||||
supportMultiProcessDeviceFeature_ = support;
|
||||
}
|
||||
|
||||
void AppRunningRecord::SetPreForeground(bool isPreForeground)
|
||||
{
|
||||
isPreForeground_.store(isPreForeground);
|
||||
}
|
||||
|
||||
bool AppRunningRecord::IsPreForeground() const
|
||||
{
|
||||
return isPreForeground_.load();
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
+82
-5
@@ -2023,7 +2023,7 @@ HWTEST_F(AppMgrServiceInnerTenthTest, NotifyPreloadAbilityStateChanged_001, Test
|
||||
auto appMgrServiceInner = std::make_shared<AppMgrServiceInner>();
|
||||
AAFwk::MyStatus::GetInstance().resetRunningRecordFunctionFlag();
|
||||
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(nullptr);
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(nullptr, true);
|
||||
EXPECT_EQ(ret, AAFwk::INVALID_CALLER_TOKEN);
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_001 end");
|
||||
}
|
||||
@@ -2041,7 +2041,7 @@ HWTEST_F(AppMgrServiceInnerTenthTest, NotifyPreloadAbilityStateChanged_002, Test
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = nullptr;
|
||||
sptr<IRemoteObject> token = new MockAppScheduler();
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token);
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token, true);
|
||||
EXPECT_NE(ret, ERR_OK);
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_002 end");
|
||||
}
|
||||
@@ -2057,13 +2057,90 @@ HWTEST_F(AppMgrServiceInnerTenthTest, NotifyPreloadAbilityStateChanged_003, Test
|
||||
auto appMgrServiceInner = std::make_shared<AppMgrServiceInner>();
|
||||
AAFwk::MyStatus::GetInstance().resetRunningRecordFunctionFlag();
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = std::make_shared<AppRunningRecord>(nullptr, 0, "");
|
||||
auto appRecord = std::make_shared<AppRunningRecord>(nullptr, 0, "");
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = appRecord;
|
||||
appRecord->SetPreForeground(true);
|
||||
sptr<IRemoteObject> token = new MockAppScheduler();
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token);
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token, true);
|
||||
EXPECT_NE(ret, ERR_OK);
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = nullptr;
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_004 end");
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: NotifyPreloadAbilityStateChanged_004
|
||||
* @tc.desc: Test NotifyPreloadAbilityStateChanged
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(AppMgrServiceInnerTenthTest, NotifyPreloadAbilityStateChanged_004, TestSize.Level1)
|
||||
{
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_004 start");
|
||||
auto appMgrServiceInner = std::make_shared<AppMgrServiceInner>();
|
||||
AAFwk::MyStatus::GetInstance().resetRunningRecordFunctionFlag();
|
||||
|
||||
auto appRecord = std::make_shared<AppRunningRecord>(nullptr, 0, "");
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = appRecord;
|
||||
appRecord->SetPreForeground(true);
|
||||
sptr<IRemoteObject> token = new MockAppScheduler();
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token, false);
|
||||
EXPECT_EQ(ret, ERR_OK);
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = nullptr;
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_003 end");
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_004 end");
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: NotifyPreloadAbilityStateChanged_005
|
||||
* @tc.desc: Test NotifyPreloadAbilityStateChanged
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(AppMgrServiceInnerTenthTest, NotifyPreloadAbilityStateChanged_005, TestSize.Level1)
|
||||
{
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_005 start");
|
||||
auto appMgrServiceInner = std::make_shared<AppMgrServiceInner>();
|
||||
AAFwk::MyStatus::GetInstance().resetRunningRecordFunctionFlag();
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = std::make_shared<AppRunningRecord>(nullptr, 0, "");
|
||||
auto &abilitiesMap = AAFwk::MyStatus::GetInstance().abilitiesMap_;
|
||||
|
||||
auto abilityInfo1 = std::make_shared<AbilityInfo>();
|
||||
sptr<IRemoteObject> token1 = new MockAppScheduler();
|
||||
auto abilityRecord1 = std::make_shared<AbilityRunningRecord>(abilityInfo1, token1, 1);
|
||||
|
||||
auto abilityInfo2 = std::make_shared<AbilityInfo>();
|
||||
sptr<IRemoteObject> token2 = new MockAppScheduler();
|
||||
auto abilityRecord2 = std::make_shared<AbilityRunningRecord>(abilityInfo2, token2, 2);
|
||||
|
||||
abilitiesMap[token1] = abilityRecord1;
|
||||
abilitiesMap[token2] = abilityRecord2;
|
||||
|
||||
sptr<IRemoteObject> token = new MockAppScheduler();
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token, true);
|
||||
EXPECT_NE(ret, ERR_OK);
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = nullptr;
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_005 end");
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: NotifyPreloadAbilityStateChanged_006
|
||||
* @tc.desc: Test NotifyPreloadAbilityStateChanged
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(AppMgrServiceInnerTenthTest, NotifyPreloadAbilityStateChanged_006, TestSize.Level1)
|
||||
{
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_006 start");
|
||||
auto appMgrServiceInner = std::make_shared<AppMgrServiceInner>();
|
||||
AAFwk::MyStatus::GetInstance().resetRunningRecordFunctionFlag();
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = std::make_shared<AppRunningRecord>(nullptr, 0, "");
|
||||
sptr<IRemoteObject> token = new MockAppScheduler();
|
||||
auto ret = appMgrServiceInner->NotifyPreloadAbilityStateChanged(token, true);
|
||||
EXPECT_EQ(ret, ERR_OK);
|
||||
|
||||
AAFwk::MyStatus::GetInstance().getAppRunningByToken_ = nullptr;
|
||||
TAG_LOGI(AAFwkTag::TEST, "NotifyPreloadAbilityStateChanged_006 end");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1286,5 +1286,26 @@ HWTEST_F(AppRunningRecordTest, AppRunningRecord_OnWindowVisibilityChangedWithPen
|
||||
EXPECT_EQ(appRunningRecord->pendingState_, ApplicationPendingState::READY);
|
||||
EXPECT_EQ(appRunningRecord->watchdogVisibilityState_, WatchdogVisibilityState::WATCHDOG_STATE_UNVISIBILITY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @tc.name: AppRunningRecord_SetPreForeground_0100
|
||||
* @tc.desc: Test SetPreForeground works.
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(AppRunningRecordTest, AppRunningRecord_SetPreForeground_0100, TestSize.Level1)
|
||||
{
|
||||
std::shared_ptr<ApplicationInfo> appInfo = std::make_shared<ApplicationInfo>();
|
||||
ASSERT_NE(appInfo, nullptr);
|
||||
int32_t recordId = RECORD_ID;
|
||||
std::string processName;
|
||||
auto appRunningRecord = std::make_shared<AppRunningRecord>(appInfo, recordId, processName);
|
||||
ASSERT_NE(appRunningRecord, nullptr);
|
||||
|
||||
appRunningRecord->SetPreForeground(true);
|
||||
EXPECT_EQ(appRunningRecord->IsPreForeground(), true);
|
||||
|
||||
appRunningRecord->SetPreForeground(false);
|
||||
EXPECT_EQ(appRunningRecord->IsPreForeground(), false);
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -1166,7 +1166,7 @@ HWTEST_F(AppSchedulerTest, AppScheduler_PreloadApplicationByPhase_0100, TestSize
|
||||
HWTEST_F(AppSchedulerTest, AppScheduler_NotifyPreloadAbilityStateChanged_0100, TestSize.Level1)
|
||||
{
|
||||
DelayedSingleton<AppScheduler>::GetInstance()->appMgrClient_ = nullptr;
|
||||
auto result = DelayedSingleton<AppScheduler>::GetInstance()->NotifyPreloadAbilityStateChanged(nullptr);
|
||||
auto result = DelayedSingleton<AppScheduler>::GetInstance()->NotifyPreloadAbilityStateChanged(nullptr, true);
|
||||
EXPECT_EQ(result, INNER_ERR);
|
||||
}
|
||||
|
||||
|
||||
+73
-73
@@ -52,7 +52,7 @@ public:
|
||||
MOCK_METHOD(void, OnWindowHidden, (const ProcessData &processData), (override));
|
||||
MOCK_METHOD(void, OnWindowShow, (const ProcessData &processData), (override));
|
||||
MOCK_METHOD(void, OnKeepAliveStateChanged, (const ProcessData &processData), (override));
|
||||
MOCK_METHOD(void, OnPreloadProcessStateChanged, (const PreloadProcessData &preloadProcessData), (override));
|
||||
MOCK_METHOD(void, OnProcessPreForegroundChanged, (const PreloadProcessData &preloadProcessData), (override));
|
||||
|
||||
sptr<IRemoteObject> AsObject() override
|
||||
{
|
||||
@@ -673,15 +673,15 @@ HWTEST_F(AppStateObserverManagerTestSecond, HandleOnKeepAliveStateChanged_002, T
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: OnPreloadProcessStateChanged_001
|
||||
* Function: OnProcessPreForegroundChanged_001
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager OnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager OnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify OnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify OnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, OnPreloadProcessStateChanged_001, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, OnProcessPreForegroundChanged_001, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "OnPreloadProcessStateChanged_001 start";
|
||||
GTEST_LOG_(INFO) << "OnProcessPreForegroundChanged_001 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
manager->handler_ = nullptr;
|
||||
|
||||
@@ -691,22 +691,22 @@ HWTEST_F(AppStateObserverManagerTestSecond, OnPreloadProcessStateChanged_001, Te
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(observer, AppStateObserverInfo{0, {"com.ohos.unittest"}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(0);
|
||||
manager->OnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "OnPreloadProcessStateChanged_001 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(0);
|
||||
manager->OnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "OnProcessPreForegroundChanged_001 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: OnPreloadProcessStateChanged_002
|
||||
* Function: OnProcessPreForegroundChanged_002
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager OnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager OnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify OnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify OnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, OnPreloadProcessStateChanged_002, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, OnProcessPreForegroundChanged_002, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "OnPreloadProcessStateChanged_002 start";
|
||||
GTEST_LOG_(INFO) << "OnProcessPreForegroundChanged_002 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockHandler = std::make_shared<MockTaskHandlerWrap>();
|
||||
manager->handler_ = mockHandler;
|
||||
@@ -714,22 +714,22 @@ HWTEST_F(AppStateObserverManagerTestSecond, OnPreloadProcessStateChanged_002, Te
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(0);
|
||||
manager->OnPreloadProcessStateChanged(nullptr, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "OnPreloadProcessStateChanged_002 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(0);
|
||||
manager->OnProcessPreForegroundChanged(nullptr);
|
||||
GTEST_LOG_(INFO) << "OnProcessPreForegroundChanged_002 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: OnPreloadProcessStateChanged_003
|
||||
* Function: OnProcessPreForegroundChanged_003
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager OnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager OnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify OnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify OnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, OnPreloadProcessStateChanged_003, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, OnProcessPreForegroundChanged_003, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "OnPreloadProcessStateChanged_003 start";
|
||||
GTEST_LOG_(INFO) << "OnProcessPreForegroundChanged_003 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockHandler = std::make_shared<MockTaskHandlerWrap>();
|
||||
manager->handler_ = mockHandler;
|
||||
@@ -740,22 +740,22 @@ HWTEST_F(AppStateObserverManagerTestSecond, OnPreloadProcessStateChanged_003, Te
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(observer, AppStateObserverInfo{0, {"com.ohos.unittest"}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(1);
|
||||
manager->OnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "OnPreloadProcessStateChanged_003 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(1);
|
||||
manager->OnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "OnProcessPreForegroundChanged_003 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: HandleOnPreloadProcessStateChanged_001
|
||||
* Function: HandleOnProcessPreForegroundChanged_001
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager HandleOnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager HandleOnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify HandleOnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify HandleOnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_001, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnProcessPreForegroundChanged_001, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_001 start";
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_001 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
@@ -764,22 +764,22 @@ HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_0
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(observer, AppStateObserverInfo{0, {}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(1);
|
||||
manager->HandleOnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_001 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(1);
|
||||
manager->HandleOnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_001 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: HandleOnPreloadProcessStateChanged_002
|
||||
* Function: HandleOnProcessPreForegroundChanged_002
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager HandleOnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager HandleOnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify HandleOnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify HandleOnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_002, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnProcessPreForegroundChanged_002, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_002 start";
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_002 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
@@ -788,22 +788,22 @@ HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_0
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(observer, AppStateObserverInfo{0, {"com.ohos.nonexist"}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(0);
|
||||
manager->HandleOnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_002 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(0);
|
||||
manager->HandleOnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_002 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: HandleOnPreloadProcessStateChanged_003
|
||||
* Function: HandleOnProcessPreForegroundChanged_003
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager HandleOnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager HandleOnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify HandleOnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify HandleOnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_003, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnProcessPreForegroundChanged_003, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_003 start";
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_003 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
@@ -812,22 +812,22 @@ HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_0
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(nullptr, AppStateObserverInfo{0, {"com.ohos.unittest"}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(0);
|
||||
manager->HandleOnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_003 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(0);
|
||||
manager->HandleOnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_003 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: HandleOnPreloadProcessStateChanged_004
|
||||
* Function: HandleOnProcessPreForegroundChanged_004
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager HandleOnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager HandleOnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify HandleOnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify HandleOnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_004, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnProcessPreForegroundChanged_004, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_004 start";
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_004 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
@@ -836,44 +836,44 @@ HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_0
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(nullptr, AppStateObserverInfo{0, {}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(0);
|
||||
manager->HandleOnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_004 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(0);
|
||||
manager->HandleOnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_004 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: HandleOnPreloadProcessStateChanged_005
|
||||
* Function: HandleOnProcessPreForegroundChanged_005
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager HandleOnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager HandleOnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify HandleOnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify HandleOnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_005, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnProcessPreForegroundChanged_005, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_005 start";
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_005 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
|
||||
manager->appStateObserverMap_.emplace(observer, AppStateObserverInfo{0, {"com.ohos.unittest"}});
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(0);
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(0);
|
||||
|
||||
manager->HandleOnPreloadProcessStateChanged(nullptr, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_005 end";
|
||||
manager->HandleOnProcessPreForegroundChanged(nullptr);
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_005 end";
|
||||
}
|
||||
|
||||
/*
|
||||
* Feature: AppStateObserverManager
|
||||
* Function: HandleOnPreloadProcessStateChanged_006
|
||||
* Function: HandleOnProcessPreForegroundChanged_006
|
||||
* SubFunction: NA
|
||||
* FunctionPoints: AppStateObserverManager HandleOnPreloadProcessStateChanged
|
||||
* FunctionPoints: AppStateObserverManager HandleOnProcessPreForegroundChanged
|
||||
* EnvConditions: NA
|
||||
* CaseDescription: Verify HandleOnPreloadProcessStateChanged
|
||||
* CaseDescription: Verify HandleOnProcessPreForegroundChanged
|
||||
*/
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_006, TestSize.Level2)
|
||||
HWTEST_F(AppStateObserverManagerTestSecond, HandleOnProcessPreForegroundChanged_006, TestSize.Level2)
|
||||
{
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_006 start";
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_006 start";
|
||||
auto manager = std::make_shared<AppStateObserverManager>();
|
||||
auto mockObserver = new MockApplicationStateObserver();
|
||||
sptr<IApplicationStateObserver> observer(mockObserver);
|
||||
@@ -882,9 +882,9 @@ HWTEST_F(AppStateObserverManagerTestSecond, HandleOnPreloadProcessStateChanged_0
|
||||
appRecord->mainBundleName_ = "com.ohos.unittest";
|
||||
manager->appStateObserverMap_.emplace(observer, AppStateObserverInfo{0, {"com.ohos.unittest"}});
|
||||
|
||||
EXPECT_CALL(*mockObserver, OnPreloadProcessStateChanged(_)).Times(1);
|
||||
manager->HandleOnPreloadProcessStateChanged(appRecord, ApplicationState::APP_STATE_PRE_FOREGROUND);
|
||||
GTEST_LOG_(INFO) << "HandleOnPreloadProcessStateChanged_006 end";
|
||||
EXPECT_CALL(*mockObserver, OnProcessPreForegroundChanged(_)).Times(1);
|
||||
manager->HandleOnProcessPreForegroundChanged(appRecord);
|
||||
GTEST_LOG_(INFO) << "HandleOnProcessPreForegroundChanged_006 end";
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -1277,5 +1277,15 @@ void AppRunningRecord::SetKeepAliveAppService(bool isKeepAliveAppService)
|
||||
{
|
||||
isKeepAliveAppService_ = isKeepAliveAppService;
|
||||
}
|
||||
|
||||
void AppRunningRecord::SetPreForeground(bool isPreForeground)
|
||||
{
|
||||
isPreForeground_.store(isPreForeground);
|
||||
}
|
||||
|
||||
bool AppRunningRecord::IsPreForeground() const
|
||||
{
|
||||
return isPreForeground_.load();
|
||||
}
|
||||
} // namespace AppExecFwk
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -54,10 +54,18 @@ HWTEST_F(HiddenStartUtilsTest, HiddenStartUtils_IsHiddenStart_001, TestSize.Leve
|
||||
auto utils = std::make_shared<HiddenStartUtils>();
|
||||
|
||||
MyFlag::retVerifyStartUIAbilityToHiddenPermission = false;
|
||||
MyFlag::retVerifyPreloadApplicationPermission = false;
|
||||
bool result = utils->IsHiddenStart(options);
|
||||
EXPECT_EQ(result, false);
|
||||
|
||||
MyFlag::retVerifyStartUIAbilityToHiddenPermission = true;
|
||||
MyFlag::retVerifyPreloadApplicationPermission = false;
|
||||
options.processOptions = nullptr;
|
||||
result = utils->IsHiddenStart(options);
|
||||
EXPECT_EQ(result, false);
|
||||
|
||||
MyFlag::retVerifyStartUIAbilityToHiddenPermission = true;
|
||||
MyFlag::retVerifyPreloadApplicationPermission = true;
|
||||
options.processOptions = nullptr;
|
||||
result = utils->IsHiddenStart(options);
|
||||
EXPECT_EQ(result, false);
|
||||
@@ -85,6 +93,13 @@ HWTEST_F(HiddenStartUtilsTest, HiddenStartUtils_CheckHiddenStartSupported_001, T
|
||||
EXPECT_EQ(result, ERR_NOT_SUPPORTED_PRODUCT_TYPE);
|
||||
|
||||
AppUtils::isStartOptionsWithAnimation_ = true;
|
||||
AppUtils::isPreloadApplicationEnabled_ = false;
|
||||
options.processOptions = nullptr;
|
||||
result = utils->CheckHiddenStartSupported(options);
|
||||
EXPECT_EQ(result, ERR_INVALID_VALUE);
|
||||
|
||||
AppUtils::isStartOptionsWithAnimation_ = true;
|
||||
AppUtils::isPreloadApplicationEnabled_ = true;
|
||||
options.processOptions = nullptr;
|
||||
result = utils->CheckHiddenStartSupported(options);
|
||||
EXPECT_EQ(result, ERR_INVALID_VALUE);
|
||||
@@ -94,47 +109,5 @@ HWTEST_F(HiddenStartUtilsTest, HiddenStartUtils_CheckHiddenStartSupported_001, T
|
||||
result = utils->CheckHiddenStartSupported(options);
|
||||
EXPECT_EQ(result, ERR_OK);
|
||||
}
|
||||
|
||||
/* *
|
||||
* @tc.name: HiddenStartUtils_IsPreloadStart_001
|
||||
* @tc.desc: IsPreloadStart
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(HiddenStartUtilsTest, HiddenStartUtils_IsPreloadStart_001, TestSize.Level1)
|
||||
{
|
||||
StartOptions options;
|
||||
auto utils = std::make_shared<HiddenStartUtils>();
|
||||
int32_t result = utils->IsPreloadStart(options);
|
||||
EXPECT_FALSE(result);
|
||||
|
||||
MyFlag::retVerifyPreloadApplicationPermission = true;
|
||||
result = utils->IsPreloadStart(options);
|
||||
EXPECT_FALSE(result);
|
||||
|
||||
options.processOptions = std::make_shared<ProcessOptions>();
|
||||
options.processOptions->startupVisibility = OHOS::AAFwk::StartupVisibility::STARTUP_HIDE;
|
||||
result = utils->IsPreloadStart(options);
|
||||
EXPECT_FALSE(result);
|
||||
|
||||
options.processOptions->isPreloadStart = true;
|
||||
result = utils->IsPreloadStart(options);
|
||||
EXPECT_TRUE(result);
|
||||
}
|
||||
|
||||
/* *
|
||||
* @tc.name: HiddenStartUtils_CheckPreloadStartSupported_001
|
||||
* @tc.desc: CheckPreloadStartSupported
|
||||
* @tc.type: FUNC
|
||||
*/
|
||||
HWTEST_F(HiddenStartUtilsTest, HiddenStartUtils_CheckPreloadStartSupported_001, TestSize.Level1)
|
||||
{
|
||||
auto utils = std::make_shared<HiddenStartUtils>();
|
||||
int32_t result = utils->CheckPreloadStartSupported();
|
||||
EXPECT_EQ(result, ERR_NOT_SUPPORTED_PRODUCT_TYPE);
|
||||
|
||||
AppUtils::isPreloadApplicationEnabled_ = true;
|
||||
result = utils->CheckPreloadStartSupported();
|
||||
EXPECT_EQ(result, ERR_OK);
|
||||
}
|
||||
} // namespace AAFwk
|
||||
} // namespace OHOS
|
||||
|
||||
Reference in New Issue
Block a user