diff --git a/frameworks/js/napi/ability_context/ability_context.js b/frameworks/js/napi/ability_context/ability_context.js index af39506dc2522b1e60f36fa3e8b6f670e6cadabc..22a8eb5900d1f870a73493c425214c580c565f4e 100644 --- a/frameworks/js/napi/ability_context/ability_context.js +++ b/frameworks/js/napi/ability_context/ability_context.js @@ -260,6 +260,10 @@ class AbilityContext extends Context { disconnectAppServiceExtensionAbility(connection, callback) { return this.__context_impl__.disconnectAppServiceExtensionAbility(connection, callback); } + + setOnNewWantSkipScenarios(scenarios) { + return this.__context_impl__.setOnNewWantSkipScenarios(scenarios); + } } export default AbilityContext; diff --git a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp index a8a379e936e103a6459c2b18d3fe3f890648cba1..10e8ae0e7f5681cdbcfbaddcf677ec35d2b1e5e3 100644 --- a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp +++ b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp @@ -1412,5 +1412,11 @@ ErrCode AbilityContextImpl::ConnectAppServiceExtensionAbility(const AAFwk::Want& } return ret; } + +ErrCode AbilityContextImpl::SetOnNewWantSkipScenarios(int32_t scenarios) +{ + HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); + return AAFwk::AbilityManagerClient::GetInstance()->SetOnNewWantSkipScenarios(token_, scenarios); +} } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp index 023ae218260d933519cba1b3ab674e4d7054d49f..e417616f0acc8ccb44cef47ae84be48d6eaf4e63 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp @@ -439,6 +439,11 @@ napi_value JsAbilityContext::RevokeDelegator(napi_env env, napi_callback_info in GET_NAPI_INFO_AND_CALL(env, info, JsAbilityContext, OnRevokeDelegator); } +napi_value JsAbilityContext::SetOnNewWantSkipScenarios(napi_env env, napi_callback_info info) +{ + GET_NAPI_INFO_AND_CALL(env, info, JsAbilityContext, OnSetOnNewWantSkipScenarios); +} + void JsAbilityContext::ClearFailedCallConnection( const std::weak_ptr& abilityContext, const std::shared_ptr &callback) { @@ -2241,6 +2246,8 @@ napi_value CreateJsAbilityContext(napi_env env, std::shared_ptr JsAbilityContext::ConnectAppServiceExtensionAbility); BindNativeFunction(env, object, "disconnectAppServiceExtensionAbility", moduleName, JsAbilityContext::DisconnectAppServiceExtensionAbility); + BindNativeFunction(env, object, "setOnNewWantSkipScenarios", moduleName, + JsAbilityContext::SetOnNewWantSkipScenarios); return object; } @@ -3093,6 +3100,45 @@ napi_value JsAbilityContext::OnRevokeDelegator(napi_env env, NapiCallbackInfo& i return result; } +napi_value JsAbilityContext::OnSetOnNewWantSkipScenarios(napi_env env, NapiCallbackInfo& info) +{ + TAG_LOGD(AAFwkTag::APPKIT, "OnSetOnNewWantSkipScenarios called"); + if (info.argc < ARGC_ONE) { + ThrowTooFewParametersError(env); + return CreateJsUndefined(env); + } + int32_t scenarios = 0; + if (!OHOS::AppExecFwk::UnwrapInt32FromJS2(env, info.argv[INDEX_ZERO], scenarios)) { + TAG_LOGE(AAFwkTag::CONTEXT, "invalid first params"); + ThrowInvalidParamError(env, "Parse param scenarios failed, scenarios must be number."); + return CreateJsUndefined(env); + } + auto innerErrCode = std::make_shared(ERR_OK); + NapiAsyncTask::ExecuteCallback execute = + [weak = context_, innerErrCode, scenarios] { + auto context = weak.lock(); + if (!context) { + TAG_LOGW(AAFwkTag::CONTEXT, "released context"); + *innerErrCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); + return; + } + *innerErrCode = context->SetOnNewWantSkipScenarios(scenarios); + }; + NapiAsyncTask::CompleteCallback complete = + [innerErrCode](napi_env env, NapiAsyncTask& task, int32_t status) { + if (*innerErrCode == ERR_OK) { + task.Resolve(env, CreateJsUndefined(env)); + } else { + task.Reject(env, CreateJsError(env, AbilityErrorCode::ERROR_CODE_INNER)); + } + }; + + napi_value result = nullptr; + NapiAsyncTask::ScheduleHighQos("JsAbilityContext::OnSetOnNewWantSkipScenarios", + env, CreateAsyncTaskWithLastParam(env, nullptr, std::move(execute), std::move(complete), &result)); + return result; +} + napi_value JsAbilityContext::OnStartAppServiceExtensionAbility(napi_env env, NapiCallbackInfo& info) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_client.h b/interfaces/inner_api/ability_manager/include/ability_manager_client.h index 6088a0b0f4d5b8f6075d07eb74cb3af33657b00f..ad5f9d31b86f03a5295c16700b44877ee133879b 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_client.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_client.h @@ -1858,6 +1858,8 @@ public: */ ErrCode ResumeExtensionAbility(sptr connect); + ErrCode SetOnNewWantSkipScenarios(sptr callerToken, int32_t scenarios); + private: AbilityManagerClient(); DISALLOW_COPY_AND_MOVE(AbilityManagerClient); diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h index 55dfbf2a9b4df111d1bea9840269f5f26a43e06f..984f313c71e07fdecaa2dab96099fa0074a93908 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -2285,6 +2285,11 @@ public: { return 0; } + + virtual int32_t SetOnNewWantSkipScenarios(sptr callerToken, int32_t scenarios) + { + return 0; + } }; } // namespace AAFwk } // namespace OHOS diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h b/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h index de80df5b372a998f20884dc994d90d88d779135c..2ee34a410ae31de2f8d31bb1df04de6af4503aac 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h @@ -418,6 +418,8 @@ enum class AbilityManagerInterfaceCode { SEND_LOCAL_PENDING_WANT_SENDER = 1070, + SET_ON_NEW_WANT_SKIP_SCENARIOS = 1071, + // ipc id for continue ability(1101) START_CONTINUATION = 1101, diff --git a/interfaces/kits/native/ability/ability_runtime/ability_context.h b/interfaces/kits/native/ability/ability_runtime/ability_context.h index 2bf0c66ae9e5d0d34d2b7ec01eaf02e6e6537593..8d72c8904800d7af5af967173a415399286a37c7 100644 --- a/interfaces/kits/native/ability/ability_runtime/ability_context.h +++ b/interfaces/kits/native/ability/ability_runtime/ability_context.h @@ -393,6 +393,7 @@ public: virtual bool GetHookOff() = 0; virtual void SetHookOff(bool hookOff) = 0; virtual ErrCode RevokeDelegator() = 0; + virtual ErrCode SetOnNewWantSkipScenarios(int32_t scenarios) = 0; virtual std::shared_ptr GetWant() = 0; diff --git a/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h b/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h index d9bc3f2314b21a74b0df1d38cd6fed6f0ec7f947..fe9695682354f2a1e42a64acf1f0d6561233c08b 100644 --- a/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h +++ b/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h @@ -368,6 +368,7 @@ public: ErrCode StopAppServiceExtensionAbility(const Want& want) override; ErrCode ConnectAppServiceExtensionAbility(const AAFwk::Want& want, const sptr& connectCallback) override; + ErrCode SetOnNewWantSkipScenarios(int32_t scenarios) override; private: sptr token_ = nullptr; diff --git a/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h b/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h index 8438244e57c6244feb9bf1da45d581d33af8fd98..35297338ae72e07d524fa3b345b70e5cf8c5baf0 100644 --- a/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h +++ b/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h @@ -75,6 +75,7 @@ public: static napi_value SetRestoreEnabled(napi_env env, napi_callback_info info); static napi_value SetColorMode(napi_env env, napi_callback_info info); static napi_value RevokeDelegator(napi_env env, napi_callback_info info); + static napi_value SetOnNewWantSkipScenarios(napi_env env, napi_callback_info info); static napi_value StartAppServiceExtensionAbility(napi_env env, napi_callback_info info); static napi_value StopAppServiceExtensionAbility(napi_env env, napi_callback_info info); static napi_value ConnectAppServiceExtensionAbility(napi_env env, napi_callback_info info); @@ -152,6 +153,7 @@ private: napi_value OnDisconnectUIServiceExtension(napi_env env, NapiCallbackInfo& info); napi_value OnSetColorMode(napi_env env, NapiCallbackInfo& info); napi_value OnRevokeDelegator(napi_env env, NapiCallbackInfo& info); + napi_value OnSetOnNewWantSkipScenarios(napi_env env, NapiCallbackInfo& info); napi_value OnStartAppServiceExtensionAbility(napi_env env, NapiCallbackInfo& info); napi_value OnStopAppServiceExtensionAbility(napi_env env, NapiCallbackInfo& info); napi_value OnConnectAppServiceExtensionAbility(napi_env env, NapiCallbackInfo& info); diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 24b52b6f45cb1133a7683d462ddde7e085e8cb95..10fb1eacb990bf2c7b70c3287b0c6c43b29439ad 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -1779,6 +1779,8 @@ public: */ virtual int32_t ResumeExtensionAbility(sptr connect) override; + virtual int32_t SetOnNewWantSkipScenarios(sptr callerToken, int32_t scenarios) override; + private: template int GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos); diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 9eef440593c606ab6c4c03994273830541645fb6..a96a5e26f69b6669bc4b4938c02ba53ecdc7419e 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -2037,6 +2037,8 @@ public: */ virtual int32_t RevokeDelegator(sptr token) override; + virtual int32_t SetOnNewWantSkipScenarios(sptr callerToken, int32_t scenarios) override; + virtual int32_t StartAbilityWithWait(Want &want, sptr &observer) override; /** diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index 75ac158a7c059e2a35b3fb26f8b4cdff5d4c6735..4a75d1495686206c7608c3ae73a541dd4889773a 100644 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -338,6 +338,7 @@ private: int32_t RegisterSAInterceptorInner(MessageParcel &data, MessageParcel &reply); int32_t SuspendExtensionAbilityInner(MessageParcel &data, MessageParcel &reply); int32_t ResumeExtensionAbilityInner(MessageParcel &data, MessageParcel &reply); + int32_t SetOnNewWantSkipScenariosInner(MessageParcel &data, MessageParcel &reply); int OnRemoteRequestInnerFirst(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option); diff --git a/services/abilitymgr/include/ability_record.h b/services/abilitymgr/include/ability_record.h index 4a17ebcc5d4524284bde03a7d100f847af19ff99..0258e8a0db81ef15e4f1c97fe079858e445f2dea 100644 --- a/services/abilitymgr/include/ability_record.h +++ b/services/abilitymgr/include/ability_record.h @@ -1234,6 +1234,16 @@ public: return isLastWantBackgroundDriven_.load(); } + inline void SetOnNewWantSkipScenarios(int32_t scenarios) + { + scenarios_.store(scenarios); + } + + inline int32_t GetOnNewWantSkipScenarios() const + { + return scenarios_.load(); + } + void SendEvent(uint32_t msg, uint32_t timeOut, int32_t param = -1, bool isExtension = false, const std::string &taskName = ""); @@ -1472,6 +1482,7 @@ private: std::shared_ptr launchWant_ = nullptr; std::shared_ptr lastWant_ = nullptr; std::atomic_bool isLastWantBackgroundDriven_ = false; + std::atomic scenarios_ = 0; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index 6496c7be27951cac50abbf7ff85d63fd78d6cfdc..679c9b6ba52542e177544b9b1ee80c42bf486ed4 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -2335,5 +2335,14 @@ ErrCode AbilityManagerClient::ResumeExtensionAbility(sptr co return abms->ResumeExtensionAbility(connect); } +ErrCode AbilityManagerClient::SetOnNewWantSkipScenarios(sptr callerToken, int32_t scenarios) +{ + HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); + auto abms = GetAbilityManager(); + CHECK_POINTER_RETURN_NOT_CONNECTED(abms); + TAG_LOGI(AAFwkTag::ABILITYMGR, "scenarios:%{public}d", scenarios); + return abms->SetOnNewWantSkipScenarios(callerToken, scenarios); +} + } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 073b5dc74da53e281b9894a15843c3d1cb4956f8..18b0d31a7793b79cbd03577e640f3488c081e485 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -6907,5 +6907,30 @@ int32_t AbilityManagerProxy::QueryKeepAliveAppServiceExtensions(std::vector callerToken, int32_t scenarios) +{ + if (callerToken == nullptr) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "null token"); + return ERR_INVALID_CONTEXT; + } + + MessageParcel data; + if (!WriteInterfaceToken(data)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "writeInterfaceToken failed"); + return ERR_WRITE_INTERFACE_TOKEN_FAILED; + } + PROXY_WRITE_PARCEL_AND_RETURN_IF_FAIL(data, RemoteObject, callerToken); + PROXY_WRITE_PARCEL_AND_RETURN_IF_FAIL(data, Int32, scenarios); + + MessageParcel reply; + MessageOption option; + auto ret = SendRequest(AbilityManagerInterfaceCode::SET_ON_NEW_WANT_SKIP_SCENARIOS, data, reply, option); + if (ret != NO_ERROR) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "request error: %{public}d", ret); + return ret; + } + return reply.ReadInt32(); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index dd43f195536c2dce0947ab456a61a47bebdace4b..ad586ca2999ced048ca8c1e01adbce688c6f88fc 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -14732,5 +14732,16 @@ int32_t AbilityManagerService::QueryKeepAliveAppServiceExtensions(std::vector callerToken, int32_t scenarios) +{ + auto record = Token::GetAbilityRecordByToken(callerToken); + if (record == nullptr) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "The toke from context is invalid"); + return ERR_INVALID_CONTEXT; + } + record->SetOnNewWantSkipScenarios(scenarios); + return ERR_OK; +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 5b0088dad62a038d4b1583c96805fafcaaea6871..37bc99ed15e6fef822a88ff91f90b350df2dba37 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -886,6 +886,9 @@ int AbilityManagerStub::OnRemoteRequestInnerTwentyFirst(uint32_t code, MessagePa if (interfaceCode == AbilityManagerInterfaceCode::RESUME_EXTENSION_ABILITY) { return ResumeExtensionAbilityInner(data, reply); } + if (interfaceCode == AbilityManagerInterfaceCode::SET_ON_NEW_WANT_SKIP_SCENARIOS) { + return SetOnNewWantSkipScenariosInner(data, reply); + } return ERR_CODE_NOT_EXIST; } @@ -4844,5 +4847,21 @@ int AbilityManagerStub::QueryKeepAliveAppServiceExtensionsInner(MessageParcel &d } return result; } + +int32_t AbilityManagerStub::SetOnNewWantSkipScenariosInner(MessageParcel &data, MessageParcel &reply) +{ + sptr token = data.ReadRemoteObject(); + if (!token) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "read ability token fail"); + return ERR_NULL_OBJECT; + } + int32_t scenarios = data.ReadInt32(); + int32_t result = SetOnNewWantSkipScenarios(token, scenarios); + if (!reply.WriteInt32(result)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "reply write fail"); + return ERR_WRITE_RESULT_CODE_FAILED; + } + return NO_ERROR; +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp index 9465ae9468583f4c615fdc3ab1fc5de4c6bd79a2..942a14a6a92fac3d693bac92983eee4bf1a6ec95 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -222,11 +222,11 @@ int UIAbilityLifecycleManager::StartUIAbility(AbilityRequest &abilityRequest, sp ProcessColdStartBranch(abilityRequest, sessionInfo, uiAbilityRecord, isColdStart)) { return ERR_OK; } - + auto scenarios = uiAbilityRecord->GetOnNewWantSkipScenarios() & sessionInfo->scenarios; if (uiAbilityRecord->GetPendingState() != AbilityState::INITIAL) { TAG_LOGI(AAFwkTag::ABILITYMGR, "pending state: FOREGROUND/ BACKGROUND, dropped"); uiAbilityRecord->SetPendingState(AbilityState::FOREGROUND); - if (sessionInfo->isNewWant) { + if (scenarios == 0 && sessionInfo->isNewWant) { uiAbilityRecord->SetLastWant(std::make_shared(abilityRequest.want)); } return ERR_OK; @@ -234,7 +234,7 @@ int UIAbilityLifecycleManager::StartUIAbility(AbilityRequest &abilityRequest, sp TAG_LOGD(AAFwkTag::ABILITYMGR, "pending state is not FOREGROUND or BACKGROUND."); uiAbilityRecord->SetPendingState(AbilityState::FOREGROUND); } - if (!isColdStart) { + if (!isColdStart && scenarios == 0) { uiAbilityRecord->SetIsNewWant(sessionInfo->isNewWant); if (sessionInfo->isNewWant) { uiAbilityRecord->SetWant(abilityRequest.want); @@ -1663,6 +1663,7 @@ int32_t UIAbilityLifecycleManager::BackToCallerAbilityWithResultLocked(sptr(currentSessionInfo->sessionToken); callerSessionInfo->isBackTransition = true; + callerSessionInfo->scenarios = ServerConstant::SCENARIO_BACK_TO_CALLER_ABILITY_WITH_RESULT; auto ret = static_cast(currentSession->PendingSessionActivation(callerSessionInfo)); callerSessionInfo->isBackTransition = false; return ret; @@ -2990,6 +2991,7 @@ int UIAbilityLifecycleManager::MoveMissionToFront(int32_t sessionId, std::shared (sessionInfo->want).GetIntParam(Want::PARAM_RESV_WINDOW_HEIGHT, 0), (sessionInfo->want).GetIntParam(Want::PARAM_RESV_WINDOW_WIDTH, 0)); sessionInfo->canStartAbilityFromBackground = true; + sessionInfo->scenarios = ServerConstant::SCENARIO_MOVE_MISSION_TO_FRONT; return static_cast(tmpSceneSession->PendingSessionActivation(sessionInfo)); } @@ -3350,7 +3352,9 @@ int UIAbilityLifecycleManager::ChangeUIAbilityVisibilityBySCB(sptr } std::shared_ptr uiAbilityRecord = iter->second; CHECK_POINTER_AND_RETURN(uiAbilityRecord, ERR_INVALID_VALUE); - uiAbilityRecord->SetIsNewWant(sessionInfo->isNewWant); + if ((uiAbilityRecord->GetOnNewWantSkipScenarios() & ServerConstant::SCENARIO_SHOW_ABILITY) == 0) { + uiAbilityRecord->SetIsNewWant(sessionInfo->isNewWant); + } TAG_LOGI(AAFwkTag::ABILITYMGR, "change ability visibility: %{public}d, isNewWant: %{public}d", isShow, sessionInfo->isNewWant); if (isShow) { diff --git a/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp b/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp index 1d656bc8511ffb14ddb0b8c95f21332d40b64d23..cc68051d6f9eb379140274e451c31b88494461fc 100644 --- a/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp +++ b/test/unittest/ability_manager_client_branch_third_test/ability_manager_client_branch_third_test.cpp @@ -1193,5 +1193,16 @@ HWTEST_F(AbilityManagerClientBranchThirdTest, TerminateMission_0400, TestSize.Le auto result = client_->TerminateMission(0); EXPECT_EQ(result, static_cast(WMError::WM_DO_NOTHING)); } + +/** + * @tc.name: AbilityManagerClient_SetOnNewWantSkipScenarios_0100 + * @tc.desc: SetOnNewWantSkipScenarios_0100 + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerClientBranchThirdTest, SetOnNewWantSkipScenarios_0100, TestSize.Level1) +{ + auto result = client_->SetOnNewWantSkipScenarios(nullptr, 0); + EXPECT_EQ(result, ERR_OK); +} } // namespace AAFwk } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/ability_manager_proxy_sixth_test/ability_manager_proxy_sixth_test.cpp b/test/unittest/ability_manager_proxy_sixth_test/ability_manager_proxy_sixth_test.cpp index 389e251f821b238b218e549233c5ad7cce857ed0..0c007a69b89061e517c6d8ff2b4351846a5c638e 100644 --- a/test/unittest/ability_manager_proxy_sixth_test/ability_manager_proxy_sixth_test.cpp +++ b/test/unittest/ability_manager_proxy_sixth_test/ability_manager_proxy_sixth_test.cpp @@ -959,5 +959,46 @@ HWTEST_F(AbilityManagerProxySixthTest, AbilityManagerProxy_QueryKeepAliveAppServ EXPECT_EQ(static_cast(AbilityManagerInterfaceCode::GET_APP_SERVICE_EXTENSIONS_KEEP_ALIVE), mock_->code_); EXPECT_EQ(res, NO_ERROR); } + +/* + * @tc.name: AbilityManagerProxy_SetOnNewWantSkipScenarios_001 + * Function: SetOnNewWantSkipScenarios + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerProxySixthTest, AbilityManagerProxy_SetOnNewWantSkipScenarios_001, TestSize.Level1) +{ + auto res = proxy_->SetOnNewWantSkipScenarios(nullptr, 0); + EXPECT_EQ(res, ERR_INVALID_CONTEXT); +} + +/* + * @tc.name: AbilityManagerProxy_SetOnNewWantSkipScenarios_002 + * Function: SetOnNewWantSkipScenarios + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerProxySixthTest, AbilityManagerProxy_SetOnNewWantSkipScenarios_002, TestSize.Level1) +{ + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) + .Times(1) + .WillOnce(Return(-1)); + auto token = sptr::MakeSptr(); + auto res = proxy_->SetOnNewWantSkipScenarios(token, 0); + EXPECT_EQ(res, -1); +} + +/* + * @tc.name: AbilityManagerProxy_SetOnNewWantSkipScenarios_003 + * Function: SetOnNewWantSkipScenarios + * @tc.type: FUNC + */ +HWTEST_F(AbilityManagerProxySixthTest, AbilityManagerProxy_SetOnNewWantSkipScenarios_003, TestSize.Level1) +{ + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) + .Times(1) + .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerStubMock::InvokeSendRequest)); + auto token = sptr::MakeSptr(); + auto res = proxy_->SetOnNewWantSkipScenarios(token, 0); + EXPECT_EQ(res, NO_ERROR); +} } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp b/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp index 70ea6b439c2a9d1be34214efa968f8bedd5910ce..03e86109954beb4c73858b3879665c10fd010c9b 100644 --- a/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp +++ b/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp @@ -1210,6 +1210,37 @@ HWTEST_F(AbilityManagerServiceTwelfthTest, QueryKeepAliveAppServiceExtensions_00 TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest QueryKeepAliveAppServiceExtensions_001 end"); } +/* + * Feature: AbilityManagerService + * Function: SetOnNewWantSkipScenarios + * SubFunction: NA + * FunctionPoints: AbilityManagerService SetOnNewWantSkipScenarios + */ +HWTEST_F(AbilityManagerServiceTwelfthTest, SetOnNewWantSkipScenarios_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest SetOnNewWantSkipScenarios_001 start"); + auto abilityMs = std::make_unique(); + int32_t result = abilityMs->SetOnNewWantSkipScenarios(nullptr, 0); + EXPECT_EQ(result, ERR_INVALID_CONTEXT); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest SetOnNewWantSkipScenarios_001 end"); +} + +/* + * Feature: AbilityManagerService + * Function: SetOnNewWantSkipScenarios + * SubFunction: NA + * FunctionPoints: AbilityManagerService SetOnNewWantSkipScenarios + */ +HWTEST_F(AbilityManagerServiceTwelfthTest, SetOnNewWantSkipScenarios_002, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest SetOnNewWantSkipScenarios_002 start"); + auto abilityMs = std::make_unique(); + auto abilityRecord = MockAbilityRecord(AbilityType::PAGE); + int32_t result = abilityMs->SetOnNewWantSkipScenarios(abilityRecord->GetToken(), 0); + EXPECT_EQ(result, ERR_OK); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest SetOnNewWantSkipScenarios_002 end"); +} + /* * Feature: AbilityManagerService * Function: SuspendExtensionAbility diff --git a/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp b/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp index 4bf139f1c02762a99826a7ac9e5015cc3ab1c058..875c0b91c2db24e55be9f88a56010d98107b7822 100644 --- a/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp +++ b/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp @@ -993,5 +993,44 @@ HWTEST_F(AbilityManagerStubSecondTest, ResumeExtensionAbilityInner_002, TestSize auto res = stub_->ResumeExtensionAbilityInner(data, reply); EXPECT_NE(res, NO_ERROR); } + +/* + * Feature: AbilityManagerService + * Function: SetOnNewWantSkipScenariosInner + * SubFunction: NA + * FunctionPoints: AbilityManagerService SetOnNewWantSkipScenariosInner + * EnvConditions: NA + * CaseDescription: Verify the function SetOnNewWantSkipScenariosInner is normal flow. + */ +HWTEST_F(AbilityManagerStubSecondTest, SetOnNewWantSkipScenariosInner_001, TestSize.Level1) +{ + MessageParcel data; + MessageParcel reply; + auto ret = stub_->SetOnNewWantSkipScenariosInner(data, reply); + EXPECT_EQ(ret, ERR_NULL_OBJECT); +} + +/* + * Feature: AbilityManagerService + * Function: SetOnNewWantSkipScenariosInner + * SubFunction: NA + * FunctionPoints: AbilityManagerService SetOnNewWantSkipScenariosInner + * EnvConditions: NA + * CaseDescription: Verify the function SetOnNewWantSkipScenariosInner is normal flow. + */ +HWTEST_F(AbilityManagerStubSecondTest, SetOnNewWantSkipScenariosInner_002, TestSize.Level1) +{ + MessageParcel data; + sptr connect = new AbilityConnectCallback(); + WriteInterfaceToken(data); + data.WriteRemoteObject(connect->AsObject()); + int32_t scenarios = 1; + data.WriteInt32(scenarios); + MessageParcel reply; + MessageOption option; + auto ret = stub_->OnRemoteRequest( + static_cast(AbilityManagerInterfaceCode::SET_ON_NEW_WANT_SKIP_SCENARIOS), data, reply, option); + EXPECT_EQ(ret, NO_ERROR); +} } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp index 89011248b96e1ac5d0ffe9393a0efd20699be92f..edb2059f7471a0250d9c194b757acdef0c9dda84 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp @@ -2358,5 +2358,17 @@ HWTEST_F(AbilityContextImplTest, OnRequestFailure_0200, Function | MediumTest | context_->OnRequestFailure(requestId, element, "failure"); EXPECT_EQ(context_->onRequestResults_.empty(), true); } + +/** + * @tc.number: Ability_Context_Impl_SetOnNewWantSkipScenarios_0100 + * @tc.name: SetOnNewWantSkipScenarios + * @tc.desc: Verify that function SetOnNewWantSkipScenarios. + */ +HWTEST_F(AbilityContextImplTest, SetOnNewWantSkipScenariose_0100, Function | MediumTest | Level1) +{ + auto context = std::make_unique(); + auto ret = context->SetOnNewWantSkipScenarios(0); + EXPECT_EQ(ret, 0); +} } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp index ca16d1f8f04ef99e9176432c6283ef2f951f45bc..fea179934a6af2d12c1d91af0e91a3de707bb7cd 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp @@ -544,6 +544,11 @@ public: { return; } + + virtual ErrCode SetOnNewWantSkipScenarios(int32_t scenarios) + { + return 0; + } private: std::unique_ptr mockContentStorage_ = nullptr; }; diff --git a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp index 6dc05abb8700c0733916088ed53c41ab668560b2..2cb9a6957bbd41efa8922681830e1d30e3b959d1 100644 --- a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp +++ b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp @@ -2721,19 +2721,6 @@ HWTEST_F(UIAbilityLifecycleManagerTest, ChangeAbilityVisibility_001, TestSize.Le EXPECT_EQ(ERR_INVALID_VALUE, ret); } -/** - * @tc.name: UIAbilityLifecycleManager_ChangeUIAbilityVisibilityBySCB_0100 - * @tc.desc: ChangeUIAbilityVisibilityBySCB - * @tc.type: FUNC - */ -HWTEST_F(UIAbilityLifecycleManagerTest, ChangeUIAbilityVisibilityBySCB_001, TestSize.Level1) -{ - auto uiAbilityLifecycleManager = std::make_shared(); - EXPECT_NE(uiAbilityLifecycleManager, nullptr); - int32_t ret = uiAbilityLifecycleManager->ChangeUIAbilityVisibilityBySCB(nullptr, true); - EXPECT_EQ(ERR_INVALID_VALUE, ret); -} - /** * @tc.name: UIAbilityLifecycleManager_IsContainsAbility_0100 * @tc.desc: IsContainsAbility diff --git a/utils/server/constant/server_constant.h b/utils/server/constant/server_constant.h index 9ed0e6fa3c1e17f13fbac5c2596b5432f4283fa1..e3d85b453dfdf37f64342d6aeb19f444d05b7b59 100644 --- a/utils/server/constant/server_constant.h +++ b/utils/server/constant/server_constant.h @@ -20,6 +20,10 @@ namespace OHOS::AbilityRuntime { namespace ServerConstant { constexpr const char* DLP_INDEX = "ohos.dlp.params.index"; constexpr const char* IS_CALL_BY_SCB = "isCallBySCB"; +constexpr uint32_t SCENARIO_MOVE_MISSION_TO_FRONT = 0x00000001; +constexpr uint32_t SCENARIO_SHOW_ABILITY = 0x00000002; +constexpr uint32_t SCENARIO_BACK_TO_CALLER_ABILITY_WITH_RESULT = 0x00000004; +constexpr uint32_t SCENARIO_CLICK_DESKTOP_ICON = 0x00000008; } // namespace ServerConstant } // namespace OHOS::AbilityRuntime #endif // OHOS_ABILITY_RUNTIME_SERVER_CONSTANT_H \ No newline at end of file