diff --git a/services/camera_service/src/camera_dialog_connection.cpp b/services/camera_service/src/camera_dialog_connection.cpp index efb08bafa87ddc222b6ad5e1806872f33f163338..9ccead87126dfc71353c2ea776cb17b0a8142072 100644 --- a/services/camera_service/src/camera_dialog_connection.cpp +++ b/services/camera_service/src/camera_dialog_connection.cpp @@ -39,6 +39,7 @@ void NoFrontCameraAbilityConnection::OnAbilityConnectDone(const AppExecFwk::Elem data.WriteString16(u"parameters"); nlohmann::json param; param["ability.want.params.uiExtensionType"] = "sysDialog/common"; + param["focusState"] = 0; std::string paramStr = param.dump(); data.WriteString16(Str8ToStr16(paramStr)); int32_t sendRequestRet = remoteObject->SendRequest(IAbilityConnection::ON_ABILITY_CONNECT_DONE, diff --git a/services/camera_service/src/hcamera_device.cpp b/services/camera_service/src/hcamera_device.cpp index c9a40bec4550f6bd650a81168c6949c548083b76..020efe2b3b17d615270c25a0dd33f7336d1805ae 100644 --- a/services/camera_service/src/hcamera_device.cpp +++ b/services/camera_service/src/hcamera_device.cpp @@ -126,9 +126,27 @@ public: void OnFoldStatusChanged(FoldStatusRosen foldStatus) override { FoldStatusRosen currentFoldStatus = foldStatus; + auto foldScreenType = system::GetParameter("const.window.foldscreen.type", ""); + CHECK_EXECUTE(currentFoldStatus == FoldStatusRosen::HALF_FOLD && foldScreenType[0] != '6', + currentFoldStatus = FoldStatusRosen::EXPAND); CHECK_RETURN_ELOG((cameraHostManager_ == nullptr || mLastFoldStatus == currentFoldStatus || cameraDevice_ == nullptr), "no need set fold status"); cameraDevice_->UpdateCameraRotateAngle(); + if (foldScreenType[0] == '6' && + ((currentFoldStatus == FoldStatusRosen::HALF_FOLD && mLastFoldStatus == FoldStatusRosen::FOLDED) || + (currentFoldStatus == FoldStatusRosen::EXPAND && + mLastFoldStatus == FoldStatusRosen::FOLD_STATE_EXPAND_WITH_SECOND_HALF_FOLDED))) { + position = cameraDevice_->GetCameraPosition(); + } + MEDIA_INFO_LOG("HCameraDevice::OnFoldStatusChanged %{public}s, %{public}d, %{public}d, %{public}d,", + foldScreenType.c_str(), position, mLastFoldStatus, currentFoldStatus); + if (foldScreenType[0] == '6' && position == OHOS_CAMERA_POSITION_FRONT && + ((currentFoldStatus == FoldStatusRosen::EXPAND && mLastFoldStatus == FoldStatusRosen::HALF_FOLD) || + (currentFoldStatus == FoldStatusRosen::EXPAND && + mLastFoldStatus == FoldStatusRosen::FOLD_STATE_EXPAND_WITH_SECOND_HALF_FOLDED))) { + MEDIA_DEBUG_LOG("HCameraDevice::OnFoldStatusChanged dialog start"); + NoFrontCameraDialog::GetInstance()->ShowCameraDialog(); + } mLastFoldStatus = currentFoldStatus; MEDIA_INFO_LOG("OnFoldStatusChanged, foldStatus: %{public}d", foldStatus); cameraHostManager_->NotifyDeviceStateChangeInfo(DeviceType::FOLD_TYPE, (int)currentFoldStatus); @@ -137,7 +155,8 @@ private: sptr cameraDevice_; sptr cameraHostManager_; std::string cameraId_; - FoldStatusRosen mLastFoldStatus = FoldStatusRosen::UNKNOWN; + FoldStatusRosen mLastFoldStatus = OHOS::Rosen::DisplayManager::GetInstance().GetFoldStatus(); + int32_t position = OHOS_CAMERA_POSITION_BACK; }; HCameraDevice::HCameraDevice(