/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "location_callback_adapter_impl.h" #include "location_proxy_adapter_impl.h" #include "nweb_log.h" namespace OHOS::NWeb { LocationCallbackImpl::LocationCallbackImpl( std::shared_ptr adapter) : locationCallbackAdapter_(adapter) {} int LocationCallbackImpl::OnRemoteRequest(uint32_t code, OHOS::MessageParcel& data, OHOS::MessageParcel& reply, OHOS::MessageOption& option) { if (data.ReadInterfaceToken() != GetDescriptor()) { WVLOG_E("LocationCallbackImpl invalid token."); return -1; } if (locationCallbackAdapter_ == nullptr) { WVLOG_E("LocationCallbackImpl adapter is nullptr."); return -1; } switch (code) { case RECEIVE_LOCATION_INFO_EVENT: { std::unique_ptr location = OHOS::Location::Location::Unmarshalling(data); OnLocationReport(location); break; } case RECEIVE_ERROR_INFO_EVENT: { int32_t errorCode = data.ReadInt32(); OnErrorReport(errorCode); break; } case RECEIVE_LOCATION_STATUS_EVENT: { int32_t status = data.ReadInt32(); OnLocatingStatusChange(status); break; } default: { WVLOG_E("locationCallback receive error code:%{public}u", code); break; } } return 0; } void LocationCallbackImpl::OnLocationReport( const std::unique_ptr& location) { std::unique_ptr tempLocation = std::make_unique(*location); std::shared_ptr locationInfo = std::make_shared(tempLocation); if (locationCallbackAdapter_ != nullptr) { locationCallbackAdapter_->OnLocationReport(locationInfo); } } void LocationCallbackImpl::OnLocatingStatusChange(const int status) { if (locationCallbackAdapter_ != nullptr) { locationCallbackAdapter_->OnLocatingStatusChange(status); } } void LocationCallbackImpl::OnErrorReport(const int errorCode) { if (locationCallbackAdapter_ != nullptr) { locationCallbackAdapter_->OnErrorReport(errorCode); } } }