diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 964aae4693..dc9cfcad1d 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1660,13 +1660,8 @@ int32_t AbilityManagerService::RequestDialogServiceInner(const Want &want, const return ERR_CROSS_USER; } - if (ImplicitStartProcessor::IsImplicitStartAction(want)) { - HILOG_ERROR("RequestDialogService does not support implicit start"); - return ERR_WRONG_INTERFACE_CALL; - } - AbilityRequest abilityRequest; - result = GenerateExtensionAbilityRequest(want, abilityRequest, callerToken, validUserId); + result = GenerateAbilityRequest(want, requestCode, abilityRequest, callerToken, validUserId); if (result != ERR_OK) { HILOG_ERROR("Generate ability request local error when RequestDialogService."); return result; @@ -1685,7 +1680,13 @@ int32_t AbilityManagerService::RequestDialogServiceInner(const Want &want, const } auto type = abilityInfo.type; - if (type == AppExecFwk::AbilityType::EXTENSION && + if (type == AppExecFwk::AbilityType::PAGE) { + result = CheckCallAbilityPermission(abilityRequest); + if (result != ERR_OK) { + HILOG_ERROR("Check permission failed"); + return result; + } + } else if (type == AppExecFwk::AbilityType::EXTENSION && abilityInfo.extensionAbilityType == AppExecFwk::ExtensionAbilityType::SERVICE) { HILOG_DEBUG("Check call ability permission, name is %{public}s.", abilityInfo.name.c_str()); result = CheckCallServicePermission(abilityRequest); @@ -1707,14 +1708,36 @@ int32_t AbilityManagerService::RequestDialogServiceInner(const Want &want, const return result; } - auto connectManager = GetConnectManagerByUserId(validUserId); - if (!connectManager) { - HILOG_ERROR("connectManager is nullptr. userId=%{public}d", validUserId); + if (type == AppExecFwk::AbilityType::EXTENSION) { + auto connectManager = GetConnectManagerByUserId(validUserId); + if (!connectManager) { + HILOG_ERROR("connectManager is nullptr. userId=%{public}d", validUserId); + return ERR_INVALID_VALUE; + } + HILOG_DEBUG("request dialog service, start service extension,name is %{public}s.", abilityInfo.name.c_str()); + ReportEventToSuspendManager(abilityInfo); + return connectManager->StartAbility(abilityRequest); + } + + if (!IsAbilityControllerStart(want, abilityInfo.bundleName)) { + HILOG_ERROR("IsAbilityControllerStart failed : %{public}s.", abilityInfo.bundleName.c_str()); + return ERR_WOULD_BLOCK; + } + if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { + ReportEventToSuspendManager(abilityInfo); + abilityRequest.userId = oriValidUserId; + abilityRequest.want.SetParam(IS_CALL_BY_SCB, false); + return uiAbilityLifecycleManager_->NotifySCBToStartUIAbility(abilityRequest, oriValidUserId); + } + auto missionListManager = GetListManagerByUserId(oriValidUserId); + if (missionListManager == nullptr) { + HILOG_ERROR("missionListManager is nullptr. userId:%{public}d", validUserId); return ERR_INVALID_VALUE; } - HILOG_DEBUG("request dialog service, start service extension,name is %{public}s.", abilityInfo.name.c_str()); + ReportAbilitStartInfoToRSS(abilityInfo); ReportEventToSuspendManager(abilityInfo); - return connectManager->StartAbility(abilityRequest); + HILOG_DEBUG("RequestDialogService, start ability, name is %{public}s.", abilityInfo.name.c_str()); + return missionListManager->StartAbility(abilityRequest); } AppExecFwk::ElementName AbilityManagerService::GetElementNameByAppId(const std::string &appId)