188edb362Sopenharmony_ci/*
288edb362Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
388edb362Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
488edb362Sopenharmony_ci * you may not use this file except in compliance with the License.
588edb362Sopenharmony_ci * You may obtain a copy of the License at
688edb362Sopenharmony_ci *
788edb362Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
888edb362Sopenharmony_ci *
988edb362Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1088edb362Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1188edb362Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1288edb362Sopenharmony_ci * See the License for the specific language governing permissions and
1388edb362Sopenharmony_ci * limitations under the License.
1488edb362Sopenharmony_ci */
1588edb362Sopenharmony_ci
1688edb362Sopenharmony_ci#ifndef SYS_INSTALLER_IMODULE_UPDATE_H
1788edb362Sopenharmony_ci#define SYS_INSTALLER_IMODULE_UPDATE_H
1888edb362Sopenharmony_ci
1988edb362Sopenharmony_ci#include "iremote_broker.h"
2088edb362Sopenharmony_ci#include "isys_installer_callback.h"
2188edb362Sopenharmony_ci#include "module_ipc_helper.h"
2288edb362Sopenharmony_ci#include "parcel.h"
2388edb362Sopenharmony_ci#include "string_ex.h"
2488edb362Sopenharmony_ci
2588edb362Sopenharmony_cinamespace OHOS {
2688edb362Sopenharmony_cinamespace SysInstaller {
2788edb362Sopenharmony_cistruct HmpVersionInfo : public Parcelable {
2888edb362Sopenharmony_ci    std::string name {};
2988edb362Sopenharmony_ci    std::string laneCode {};
3088edb362Sopenharmony_ci    std::string compatibleVersion {};
3188edb362Sopenharmony_ci    std::string version {};
3288edb362Sopenharmony_ci
3388edb362Sopenharmony_ci    virtual bool Marshalling(Parcel &parcel) const override
3488edb362Sopenharmony_ci    {
3588edb362Sopenharmony_ci        if (!parcel.WriteString16(Str8ToStr16(name))) {
3688edb362Sopenharmony_ci            return false;
3788edb362Sopenharmony_ci        }
3888edb362Sopenharmony_ci        if (!parcel.WriteString16(Str8ToStr16(laneCode))) {
3988edb362Sopenharmony_ci            return false;
4088edb362Sopenharmony_ci        }
4188edb362Sopenharmony_ci        if (!parcel.WriteString16(Str8ToStr16(compatibleVersion))) {
4288edb362Sopenharmony_ci            return false;
4388edb362Sopenharmony_ci        }
4488edb362Sopenharmony_ci        if (!parcel.WriteString16(Str8ToStr16(version))) {
4588edb362Sopenharmony_ci            return false;
4688edb362Sopenharmony_ci        }
4788edb362Sopenharmony_ci        return true;
4888edb362Sopenharmony_ci    }
4988edb362Sopenharmony_ci
5088edb362Sopenharmony_ci    bool ReadFromParcel(Parcel &parcel)
5188edb362Sopenharmony_ci    {
5288edb362Sopenharmony_ci        name = Str16ToStr8(parcel.ReadString16());
5388edb362Sopenharmony_ci        laneCode = Str16ToStr8(parcel.ReadString16());
5488edb362Sopenharmony_ci        compatibleVersion = Str16ToStr8(parcel.ReadString16());
5588edb362Sopenharmony_ci        version = Str16ToStr8(parcel.ReadString16());
5688edb362Sopenharmony_ci        return true;
5788edb362Sopenharmony_ci    }
5888edb362Sopenharmony_ci
5988edb362Sopenharmony_ci    static HmpVersionInfo *Unmarshalling(Parcel &parcel)
6088edb362Sopenharmony_ci    {
6188edb362Sopenharmony_ci        HmpVersionInfo *obj = new (std::nothrow) HmpVersionInfo();
6288edb362Sopenharmony_ci        if (obj != nullptr && !obj->ReadFromParcel(parcel)) {
6388edb362Sopenharmony_ci            delete obj;
6488edb362Sopenharmony_ci            obj = nullptr;
6588edb362Sopenharmony_ci        }
6688edb362Sopenharmony_ci        return obj;
6788edb362Sopenharmony_ci    }
6888edb362Sopenharmony_ci};
6988edb362Sopenharmony_ci
7088edb362Sopenharmony_cistruct HmpUpdateInfo : public Parcelable {
7188edb362Sopenharmony_ci    std::string path {};
7288edb362Sopenharmony_ci    int32_t result = 0; // 0 means success
7388edb362Sopenharmony_ci    std::string resultMsg {};
7488edb362Sopenharmony_ci
7588edb362Sopenharmony_ci    virtual bool Marshalling(Parcel &parcel) const override
7688edb362Sopenharmony_ci    {
7788edb362Sopenharmony_ci        if (!parcel.WriteString16(Str8ToStr16(path))) {
7888edb362Sopenharmony_ci            return false;
7988edb362Sopenharmony_ci        }
8088edb362Sopenharmony_ci        if (!parcel.WriteInt32(result)) {
8188edb362Sopenharmony_ci            return false;
8288edb362Sopenharmony_ci        }
8388edb362Sopenharmony_ci        if (!parcel.WriteString16(Str8ToStr16(resultMsg))) {
8488edb362Sopenharmony_ci            return false;
8588edb362Sopenharmony_ci        }
8688edb362Sopenharmony_ci        return true;
8788edb362Sopenharmony_ci    }
8888edb362Sopenharmony_ci
8988edb362Sopenharmony_ci    bool ReadFromParcel(Parcel &parcel)
9088edb362Sopenharmony_ci    {
9188edb362Sopenharmony_ci        path = Str16ToStr8(parcel.ReadString16());
9288edb362Sopenharmony_ci        result = parcel.ReadInt32();
9388edb362Sopenharmony_ci        resultMsg = Str16ToStr8(parcel.ReadString16());
9488edb362Sopenharmony_ci        return true;
9588edb362Sopenharmony_ci    }
9688edb362Sopenharmony_ci
9788edb362Sopenharmony_ci    static HmpUpdateInfo *Unmarshalling(Parcel &parcel)
9888edb362Sopenharmony_ci    {
9988edb362Sopenharmony_ci        HmpUpdateInfo *obj = new (std::nothrow) HmpUpdateInfo();
10088edb362Sopenharmony_ci        if (obj != nullptr && !obj->ReadFromParcel(parcel)) {
10188edb362Sopenharmony_ci            delete obj;
10288edb362Sopenharmony_ci            obj = nullptr;
10388edb362Sopenharmony_ci        }
10488edb362Sopenharmony_ci        return obj;
10588edb362Sopenharmony_ci    }
10688edb362Sopenharmony_ci};
10788edb362Sopenharmony_ci
10888edb362Sopenharmony_ciclass IModuleUpdate : public OHOS::IRemoteBroker {
10988edb362Sopenharmony_cipublic:
11088edb362Sopenharmony_ci    DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.Updater.IModuleUpdate");
11188edb362Sopenharmony_ci
11288edb362Sopenharmony_ci    virtual int32_t InstallModulePackage(const std::string &pkgPath) = 0;
11388edb362Sopenharmony_ci    virtual int32_t UninstallModulePackage(const std::string &hmpName) = 0;
11488edb362Sopenharmony_ci    virtual int32_t GetModulePackageInfo(const std::string &hmpName,
11588edb362Sopenharmony_ci        std::list<ModulePackageInfo> &modulePackageInfos) = 0;
11688edb362Sopenharmony_ci    virtual int32_t ExitModuleUpdate() = 0;
11788edb362Sopenharmony_ci
11888edb362Sopenharmony_ci    virtual std::vector<HmpVersionInfo> GetHmpVersionInfo() = 0;
11988edb362Sopenharmony_ci    virtual int32_t StartUpdateHmpPackage(const std::string &path,
12088edb362Sopenharmony_ci        const sptr<ISysInstallerCallback> &updateCallback) = 0;
12188edb362Sopenharmony_ci    virtual std::vector<HmpUpdateInfo> GetHmpUpdateResult() = 0;
12288edb362Sopenharmony_ci};
12388edb362Sopenharmony_ci} // namespace SysInstaller
12488edb362Sopenharmony_ci} // namespace OHOS
12588edb362Sopenharmony_ci#endif // SYS_INSTALLER_IMODULE_UPDATE_H
126