1686862fbSopenharmony_ci/* 2686862fbSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3686862fbSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4686862fbSopenharmony_ci * you may not use this file except in compliance with the License. 5686862fbSopenharmony_ci * You may obtain a copy of the License at 6686862fbSopenharmony_ci * 7686862fbSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8686862fbSopenharmony_ci * 9686862fbSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10686862fbSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11686862fbSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12686862fbSopenharmony_ci * See the License for the specific language governing permissions and 13686862fbSopenharmony_ci * limitations under the License. 14686862fbSopenharmony_ci */ 15686862fbSopenharmony_ci 16686862fbSopenharmony_ci#include "mission/mission_info_converter.h" 17686862fbSopenharmony_ci 18686862fbSopenharmony_ci#include "adapter/adapter_constant.h" 19686862fbSopenharmony_ci#include "dtbschedmgr_log.h" 20686862fbSopenharmony_ci#include "mission/mission_constant.h" 21686862fbSopenharmony_ci#include "parcel_helper.h" 22686862fbSopenharmony_ci 23686862fbSopenharmony_ciusing namespace std; 24686862fbSopenharmony_cinamespace OHOS { 25686862fbSopenharmony_cinamespace DistributedSchedule { 26686862fbSopenharmony_ciusing namespace Constants::Adapter; 27686862fbSopenharmony_cinamespace { 28686862fbSopenharmony_ciconst std::string TAG = "MissionInfoConverter"; 29686862fbSopenharmony_ci} 30686862fbSopenharmony_ciint32_t MissionInfoConverter::ConvertToDstbMissionInfos(std::vector<AAFwk::MissionInfo>& missionInfoSet, 31686862fbSopenharmony_ci std::vector<DstbMissionInfo>& dstbMissionInfoSet) 32686862fbSopenharmony_ci{ 33686862fbSopenharmony_ci if (missionInfoSet.empty()) { 34686862fbSopenharmony_ci return ERR_OK; 35686862fbSopenharmony_ci } 36686862fbSopenharmony_ci for (auto iter = missionInfoSet.begin(); iter != missionInfoSet.end(); iter++) { 37686862fbSopenharmony_ci DstbMissionInfo dstbMissionInfo; 38686862fbSopenharmony_ci dstbMissionInfo.id = iter->id; 39686862fbSopenharmony_ci dstbMissionInfo.runingState = iter->runningState; 40686862fbSopenharmony_ci dstbMissionInfo.lockedState = iter->lockedState; 41686862fbSopenharmony_ci dstbMissionInfo.label = iter->label; 42686862fbSopenharmony_ci dstbMissionInfo.iconPath = iter->iconPath; 43686862fbSopenharmony_ci shared_ptr<AAFwk::Want> spWant = make_shared<AAFwk::Want>(iter->want); 44686862fbSopenharmony_ci dstbMissionInfo.baseWant = spWant; 45686862fbSopenharmony_ci dstbMissionInfo.continuable = iter->continuable ? 1 : 0; 46686862fbSopenharmony_ci dstbMissionInfoSet.push_back(dstbMissionInfo); 47686862fbSopenharmony_ci } 48686862fbSopenharmony_ci return ERR_OK; 49686862fbSopenharmony_ci} 50686862fbSopenharmony_ci 51686862fbSopenharmony_ciint32_t MissionInfoConverter::ConvertToMissionInfos(std::vector<DstbMissionInfo>& dstbMissionInfoSet, 52686862fbSopenharmony_ci std::vector<AAFwk::MissionInfo>& missionInfoSet) 53686862fbSopenharmony_ci{ 54686862fbSopenharmony_ci if (dstbMissionInfoSet.empty()) { 55686862fbSopenharmony_ci return ERR_OK; 56686862fbSopenharmony_ci } 57686862fbSopenharmony_ci for (auto iter = dstbMissionInfoSet.begin(); iter != dstbMissionInfoSet.end(); iter++) { 58686862fbSopenharmony_ci AAFwk::MissionInfo missionInfo; 59686862fbSopenharmony_ci missionInfo.id = iter->id; 60686862fbSopenharmony_ci missionInfo.runningState = iter->runingState; 61686862fbSopenharmony_ci missionInfo.lockedState = iter->lockedState; 62686862fbSopenharmony_ci missionInfo.label = iter->label; 63686862fbSopenharmony_ci missionInfo.iconPath = iter->iconPath; 64686862fbSopenharmony_ci missionInfo.want = *(iter->baseWant); 65686862fbSopenharmony_ci missionInfo.continuable = iter->continuable == 1; 66686862fbSopenharmony_ci missionInfoSet.push_back(missionInfo); 67686862fbSopenharmony_ci } 68686862fbSopenharmony_ci return ERR_OK; 69686862fbSopenharmony_ci} 70686862fbSopenharmony_ci 71686862fbSopenharmony_cibool MissionInfoConverter::ReadMissionInfosFromParcel(Parcel& parcel, 72686862fbSopenharmony_ci std::vector<AAFwk::MissionInfo>& missionInfoSet) 73686862fbSopenharmony_ci{ 74686862fbSopenharmony_ci int32_t empty = parcel.ReadInt32(); 75686862fbSopenharmony_ci if (empty == VALUE_OBJECT) { 76686862fbSopenharmony_ci int32_t len = parcel.ReadInt32(); 77686862fbSopenharmony_ci HILOGD("ReadMissionInfosFromParcel::readLength is:%{public}d", len); 78686862fbSopenharmony_ci if (len < 0) { 79686862fbSopenharmony_ci return false; 80686862fbSopenharmony_ci } 81686862fbSopenharmony_ci size_t size = static_cast<size_t>(len); 82686862fbSopenharmony_ci if ((size > parcel.GetReadableBytes()) || (size > Constants::Mission::GET_MAX_MISSIONS)) { 83686862fbSopenharmony_ci HILOGE("Failed to read MissionInfo vector, size = %{public}zu", size); 84686862fbSopenharmony_ci return false; 85686862fbSopenharmony_ci } 86686862fbSopenharmony_ci missionInfoSet.clear(); 87686862fbSopenharmony_ci for (size_t i = 0; i < size; i++) { 88686862fbSopenharmony_ci AAFwk::MissionInfo *ptr = parcel.ReadParcelable<AAFwk::MissionInfo>(); 89686862fbSopenharmony_ci if (ptr == nullptr) { 90686862fbSopenharmony_ci HILOGW("read MissionInfo failed"); 91686862fbSopenharmony_ci return false; 92686862fbSopenharmony_ci } 93686862fbSopenharmony_ci missionInfoSet.emplace_back(*ptr); 94686862fbSopenharmony_ci delete ptr; 95686862fbSopenharmony_ci } 96686862fbSopenharmony_ci } 97686862fbSopenharmony_ci 98686862fbSopenharmony_ci HILOGI("ReadMissionInfosFromParcel end. info size is:%{public}zu", missionInfoSet.size()); 99686862fbSopenharmony_ci return true; 100686862fbSopenharmony_ci} 101686862fbSopenharmony_ci 102686862fbSopenharmony_cibool MissionInfoConverter::WriteMissionInfosToParcel(Parcel& parcel, 103686862fbSopenharmony_ci const std::vector<AAFwk::MissionInfo>& missionInfoSet) 104686862fbSopenharmony_ci{ 105686862fbSopenharmony_ci size_t size = missionInfoSet.size(); 106686862fbSopenharmony_ci if (size == 0) { 107686862fbSopenharmony_ci PARCEL_WRITE_HELPER_RET(parcel, Int32, VALUE_NULL, false); 108686862fbSopenharmony_ci return true; 109686862fbSopenharmony_ci } 110686862fbSopenharmony_ci 111686862fbSopenharmony_ci PARCEL_WRITE_HELPER_RET(parcel, Int32, VALUE_OBJECT, false); 112686862fbSopenharmony_ci PARCEL_WRITE_HELPER_RET(parcel, Int32, size, false); 113686862fbSopenharmony_ci for (auto& info : missionInfoSet) { 114686862fbSopenharmony_ci PARCEL_WRITE_HELPER_RET(parcel, Parcelable, &info, false); 115686862fbSopenharmony_ci } 116686862fbSopenharmony_ci return true; 117686862fbSopenharmony_ci} 118686862fbSopenharmony_ci} // namespace DistributedSchedule 119686862fbSopenharmony_ci} // namespace OHOS 120