/*

 * Copyright (c) 2022-2026 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 "continuous_task_callback_info.h"

#include "string_ex.h"

#include "continuous_task_log.h"

#include "ipc_util.h"



namespace OHOS {

namespace BackgroundTaskMgr {

ContinuousTaskCallbackInfo::ContinuousTaskCallbackInfo() {}



uint32_t ContinuousTaskCallbackInfo::GetTypeId() const

{

    return typeId_;

}



const std::vector<uint32_t>& ContinuousTaskCallbackInfo::GetTypeIds() const

{

    return typeIds_;

}



bool ContinuousTaskCallbackInfo::IsBatchApi() const

{

    return isBatchApi_;

}



int32_t ContinuousTaskCallbackInfo::GetAbilityId() const

{

    return abilityId_;

}



int32_t ContinuousTaskCallbackInfo::GetCreatorUid() const

{

    return creatorUid_;

}



pid_t ContinuousTaskCallbackInfo::GetCreatorPid() const

{

    return creatorPid_;

}



std::string ContinuousTaskCallbackInfo::GetAbilityName() const

{

    return abilityName_;

}



bool ContinuousTaskCallbackInfo::IsFromWebview() const

{

    return isFromWebview_;

}



uint64_t ContinuousTaskCallbackInfo::GetTokenId() const

{

    return tokenId_;

}



void ContinuousTaskCallbackInfo::SetContinuousTaskId(const int32_t id)

{

    continuousTaskId_ = id;

}

 

void ContinuousTaskCallbackInfo::SetCancelReason(const int32_t reason)

{

    cancelReason_ = reason;

}



void ContinuousTaskCallbackInfo::SetSuspendReason(const int32_t suspendReason)

{

    suspendReason_ = suspendReason;

}



void ContinuousTaskCallbackInfo::SetSuspendState(const bool suspendState)

{

    suspendState_ = suspendState;

}

 

int32_t ContinuousTaskCallbackInfo::GetContinuousTaskId() const

{

    return continuousTaskId_;

}

 

int32_t ContinuousTaskCallbackInfo::GetCancelReason() const

{

    return cancelReason_;

}



int32_t ContinuousTaskCallbackInfo::GetSuspendReason() const

{

    return suspendReason_;

}



int32_t ContinuousTaskCallbackInfo::GetDetailedCancelReason() const

{

    return detailedCancelReason_;

}



void ContinuousTaskCallbackInfo::SetDetailedCancelReason(const int32_t detailedReason)

{

    detailedCancelReason_ = detailedReason;

}



bool ContinuousTaskCallbackInfo::GetSuspendState() const

{

    return suspendState_;

}



bool ContinuousTaskCallbackInfo::IsByRequestObject() const

{

    return isByRequestObject_ ;

}



std::string ContinuousTaskCallbackInfo::GetBundleName() const

{

    return bundleName_;

}



int32_t ContinuousTaskCallbackInfo::GetUserId() const

{

    return userId_;

}



int32_t ContinuousTaskCallbackInfo::GetAppIndex() const

{

    return appIndex_;

}



void ContinuousTaskCallbackInfo::SetByRequestObject(const bool isByRequestObject)

{

    isByRequestObject_ = isByRequestObject;

}



void ContinuousTaskCallbackInfo::SetBundleName(const std::string &bundleName)

{

    bundleName_ = bundleName;

}



void ContinuousTaskCallbackInfo::SetUserId(int32_t userId)

{

    userId_ = userId;

}



void ContinuousTaskCallbackInfo::SetAppIndex(int32_t appIndex)

{

    appIndex_ = appIndex;

}



void ContinuousTaskCallbackInfo::SetBackgroundSubModes(

    const std::vector<uint32_t> &backgroundSubModes)

{

    backgroundSubModes_ = backgroundSubModes;

}



void ContinuousTaskCallbackInfo::SetNotificationId(int32_t notificationId)

{

    notificationId_ = notificationId;

}



void ContinuousTaskCallbackInfo::SetWantAgentBundleName(

    const std::string &wantAgentBundleName)

{

    wantAgentBundleName_ = wantAgentBundleName;

}



void ContinuousTaskCallbackInfo::SetWantAgentAbilityName(

    const std::string &wantAgentAbilityName)

{

    wantAgentAbilityName_ = wantAgentAbilityName;

}



std::vector<uint32_t> ContinuousTaskCallbackInfo::GetBackgroundSubModes() const

{

    return backgroundSubModes_;

}



int32_t ContinuousTaskCallbackInfo::GetNotificationId() const

{

    return notificationId_;

}



std::string ContinuousTaskCallbackInfo::GetWantAgentBundleName() const

{

    return wantAgentBundleName_;

}



std::string ContinuousTaskCallbackInfo::GetWantAgentAbilityName() const

{

    return wantAgentAbilityName_;

}



void ContinuousTaskCallbackInfo::SetCancelCallBackSelf(bool cancelCallBackSelf)

{

    cancelCallBackSelf_ = cancelCallBackSelf;

}



bool ContinuousTaskCallbackInfo::IsCancelCallBackSelf() const

{

    return cancelCallBackSelf_;

}



bool ContinuousTaskCallbackInfo::IsStandby() const

{

    return isStandby_;

}

 

void ContinuousTaskCallbackInfo::SetStandby(const bool isStandby)

{

    isStandby_ = isStandby;

}



bool ContinuousTaskCallbackInfo::Marshalling(Parcel &parcel) const

{

    WRITE_PARCEL_WITH_RET(parcel, Uint32, typeId_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, creatorUid_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, creatorPid_, false);

    WRITE_PARCEL_WITH_RET(parcel, Bool, isFromWebview_, false);

    std::u16string u16AbilityName = Str8ToStr16(abilityName_);

    WRITE_PARCEL_WITH_RET(parcel, String16, u16AbilityName, false);

    WRITE_PARCEL_WITH_RET(parcel, Bool, isBatchApi_, false);

    WRITE_PARCEL_WITH_RET(parcel, UInt32Vector, typeIds_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, abilityId_, false);

    WRITE_PARCEL_WITH_RET(parcel, Uint64, tokenId_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, continuousTaskId_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, detailedCancelReason_, false);

    WRITE_PARCEL_WITH_RET(parcel, Bool, suspendState_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false);

    WRITE_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false);

    std::u16string u16BundleName = Str8ToStr16(bundleName_);

    WRITE_PARCEL_WITH_RET(parcel, String16, u16BundleName, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, userId_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, appIndex_, false);

    WRITE_PARCEL_WITH_RET(parcel, UInt32Vector, backgroundSubModes_, false);

    WRITE_PARCEL_WITH_RET(parcel, Int32, notificationId_, false);

    std::u16string u16WantAgentBundleName = Str8ToStr16(wantAgentBundleName_);

    WRITE_PARCEL_WITH_RET(parcel, String16, u16WantAgentBundleName, false);

    std::u16string u16WantAgentAbilityName = Str8ToStr16(wantAgentAbilityName_);

    WRITE_PARCEL_WITH_RET(parcel, String16, u16WantAgentAbilityName, false);

    WRITE_PARCEL_WITH_RET(parcel, Bool, cancelCallBackSelf_, false);

    WRITE_PARCEL_WITH_RET(parcel, Bool, isStandby_, false);

    return true;

}



ContinuousTaskCallbackInfo *ContinuousTaskCallbackInfo::Unmarshalling(Parcel &parcel)

{

    auto object = new (std::nothrow) ContinuousTaskCallbackInfo();

    if ((object != nullptr) && !object->ReadFromParcel(parcel)) {

        delete object;

        object = nullptr;

    }



    return object;

}



bool ContinuousTaskCallbackInfo::ReadFromParcel(Parcel &parcel)

{

    READ_PARCEL_WITH_RET(parcel, Uint32, typeId_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, creatorUid_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, creatorPid_, false);

    READ_PARCEL_WITH_RET(parcel, Bool, isFromWebview_, false);

    std::u16string u16AbilityName;

    READ_PARCEL_WITH_RET(parcel, String16, u16AbilityName, false);

    abilityName_ = Str16ToStr8(u16AbilityName);

    READ_PARCEL_WITH_RET(parcel, Bool, isBatchApi_, false);

    READ_PARCEL_WITH_RET(parcel, UInt32Vector, (&typeIds_), false);

    READ_PARCEL_WITH_RET(parcel, Int32, abilityId_, false);

    READ_PARCEL_WITH_RET(parcel, Uint64, tokenId_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, continuousTaskId_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, cancelReason_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, detailedCancelReason_, false);

    READ_PARCEL_WITH_RET(parcel, Bool, suspendState_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, suspendReason_, false);

    READ_PARCEL_WITH_RET(parcel, Bool, isByRequestObject_, false);

    std::u16string u16BundleName;

    READ_PARCEL_WITH_RET(parcel, String16, u16BundleName, false);

    bundleName_ = Str16ToStr8(u16BundleName);

    READ_PARCEL_WITH_RET(parcel, Int32, userId_, false);

    READ_PARCEL_WITH_RET(parcel, Int32, appIndex_, false);

    READ_PARCEL_WITH_RET(parcel, UInt32Vector, (&backgroundSubModes_), false);

    READ_PARCEL_WITH_RET(parcel, Int32, notificationId_, false);

    std::u16string u16WantAgentBundleName;

    READ_PARCEL_WITH_RET(parcel, String16, u16WantAgentBundleName, false);

    wantAgentBundleName_ = Str16ToStr8(u16WantAgentBundleName);

    std::u16string u16WantAgentAbilityName;

    READ_PARCEL_WITH_RET(parcel, String16, u16WantAgentAbilityName, false);

    wantAgentAbilityName_ = Str16ToStr8(u16WantAgentAbilityName);

    READ_PARCEL_WITH_RET(parcel, Bool, cancelCallBackSelf_, false);

    READ_PARCEL_WITH_RET(parcel, Bool, isStandby_, false);

    return true;

}

}  // namespace BackgroundTaskMgr

}  // namespace OHOS