15c735df2Sopenharmony_ci/*
25c735df2Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
35c735df2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
45c735df2Sopenharmony_ci * you may not use this file except in compliance with the License.
55c735df2Sopenharmony_ci * You may obtain a copy of the License at
65c735df2Sopenharmony_ci *
75c735df2Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
85c735df2Sopenharmony_ci *
95c735df2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
105c735df2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
115c735df2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
125c735df2Sopenharmony_ci * See the License for the specific language governing permissions and
135c735df2Sopenharmony_ci * limitations under the License.
145c735df2Sopenharmony_ci */
155c735df2Sopenharmony_ci
165c735df2Sopenharmony_ci#ifndef LOCATION_H
175c735df2Sopenharmony_ci#define LOCATION_H
185c735df2Sopenharmony_ci
195c735df2Sopenharmony_ci#include <parcel.h>
205c735df2Sopenharmony_ci#include <string>
215c735df2Sopenharmony_ci#include <map>
225c735df2Sopenharmony_ci
235c735df2Sopenharmony_cinamespace OHOS {
245c735df2Sopenharmony_cinamespace Location {
255c735df2Sopenharmony_ciclass Location : public Parcelable {
265c735df2Sopenharmony_cipublic:
275c735df2Sopenharmony_ci    Location();
285c735df2Sopenharmony_ci    explicit Location(Location &location);
295c735df2Sopenharmony_ci    ~Location() override = default;
305c735df2Sopenharmony_ci
315c735df2Sopenharmony_ci    inline double GetLatitude() const
325c735df2Sopenharmony_ci    {
335c735df2Sopenharmony_ci        return latitude_;
345c735df2Sopenharmony_ci    }
355c735df2Sopenharmony_ci
365c735df2Sopenharmony_ci    inline void SetLatitude(double latitude)
375c735df2Sopenharmony_ci    {
385c735df2Sopenharmony_ci        latitude_ = latitude;
395c735df2Sopenharmony_ci    }
405c735df2Sopenharmony_ci
415c735df2Sopenharmony_ci    inline double GetLongitude() const
425c735df2Sopenharmony_ci    {
435c735df2Sopenharmony_ci        return longitude_;
445c735df2Sopenharmony_ci    }
455c735df2Sopenharmony_ci
465c735df2Sopenharmony_ci    inline void SetLongitude(double longitude)
475c735df2Sopenharmony_ci    {
485c735df2Sopenharmony_ci        longitude_ = longitude;
495c735df2Sopenharmony_ci    }
505c735df2Sopenharmony_ci
515c735df2Sopenharmony_ci    inline double GetAltitude() const
525c735df2Sopenharmony_ci    {
535c735df2Sopenharmony_ci        return altitude_;
545c735df2Sopenharmony_ci    }
555c735df2Sopenharmony_ci
565c735df2Sopenharmony_ci    inline void SetAltitude(double altitude)
575c735df2Sopenharmony_ci    {
585c735df2Sopenharmony_ci        altitude_ = altitude;
595c735df2Sopenharmony_ci    }
605c735df2Sopenharmony_ci
615c735df2Sopenharmony_ci    inline double GetAccuracy() const
625c735df2Sopenharmony_ci    {
635c735df2Sopenharmony_ci        return accuracy_;
645c735df2Sopenharmony_ci    }
655c735df2Sopenharmony_ci
665c735df2Sopenharmony_ci    inline void SetAccuracy(double accuracy)
675c735df2Sopenharmony_ci    {
685c735df2Sopenharmony_ci        accuracy_ = accuracy;
695c735df2Sopenharmony_ci    }
705c735df2Sopenharmony_ci
715c735df2Sopenharmony_ci    inline double GetSpeed() const
725c735df2Sopenharmony_ci    {
735c735df2Sopenharmony_ci        return speed_;
745c735df2Sopenharmony_ci    }
755c735df2Sopenharmony_ci
765c735df2Sopenharmony_ci    inline void SetSpeed(double speed)
775c735df2Sopenharmony_ci    {
785c735df2Sopenharmony_ci        speed_ = speed;
795c735df2Sopenharmony_ci    }
805c735df2Sopenharmony_ci
815c735df2Sopenharmony_ci    inline double GetDirection() const
825c735df2Sopenharmony_ci    {
835c735df2Sopenharmony_ci        return direction_;
845c735df2Sopenharmony_ci    }
855c735df2Sopenharmony_ci
865c735df2Sopenharmony_ci    inline void SetDirection(double direction)
875c735df2Sopenharmony_ci    {
885c735df2Sopenharmony_ci        direction_ = direction;
895c735df2Sopenharmony_ci    }
905c735df2Sopenharmony_ci
915c735df2Sopenharmony_ci    inline int64_t GetTimeStamp() const
925c735df2Sopenharmony_ci    {
935c735df2Sopenharmony_ci        return timeStamp_;
945c735df2Sopenharmony_ci    }
955c735df2Sopenharmony_ci
965c735df2Sopenharmony_ci    inline void SetTimeStamp(int64_t timeStamp)
975c735df2Sopenharmony_ci    {
985c735df2Sopenharmony_ci        timeStamp_ = timeStamp;
995c735df2Sopenharmony_ci    }
1005c735df2Sopenharmony_ci
1015c735df2Sopenharmony_ci    inline int64_t GetTimeSinceBoot() const
1025c735df2Sopenharmony_ci    {
1035c735df2Sopenharmony_ci        return timeSinceBoot_;
1045c735df2Sopenharmony_ci    }
1055c735df2Sopenharmony_ci
1065c735df2Sopenharmony_ci    inline void SetTimeSinceBoot(int64_t timeStamp)
1075c735df2Sopenharmony_ci    {
1085c735df2Sopenharmony_ci        timeSinceBoot_ = timeStamp;
1095c735df2Sopenharmony_ci    }
1105c735df2Sopenharmony_ci
1115c735df2Sopenharmony_ci    inline std::vector<std::string> GetAdditions() const
1125c735df2Sopenharmony_ci    {
1135c735df2Sopenharmony_ci        return additions_;
1145c735df2Sopenharmony_ci    }
1155c735df2Sopenharmony_ci
1165c735df2Sopenharmony_ci    inline void SetAdditions(std::vector<std::string> additions, bool ifAppend)
1175c735df2Sopenharmony_ci    {
1185c735df2Sopenharmony_ci        if (!ifAppend) {
1195c735df2Sopenharmony_ci            std::vector<std::string>().swap(additions_);
1205c735df2Sopenharmony_ci        }
1215c735df2Sopenharmony_ci        for (auto it = additions.begin(); it != additions.end(); ++it) {
1225c735df2Sopenharmony_ci            additions_.push_back(*it);
1235c735df2Sopenharmony_ci        }
1245c735df2Sopenharmony_ci    }
1255c735df2Sopenharmony_ci
1265c735df2Sopenharmony_ci    inline int64_t GetAdditionSize() const
1275c735df2Sopenharmony_ci    {
1285c735df2Sopenharmony_ci        return additionSize_;
1295c735df2Sopenharmony_ci    }
1305c735df2Sopenharmony_ci
1315c735df2Sopenharmony_ci    inline void SetAdditionSize(int64_t size)
1325c735df2Sopenharmony_ci    {
1335c735df2Sopenharmony_ci        additionSize_ = size;
1345c735df2Sopenharmony_ci    }
1355c735df2Sopenharmony_ci
1365c735df2Sopenharmony_ci    inline int GetIsFromMock() const
1375c735df2Sopenharmony_ci    {
1385c735df2Sopenharmony_ci        return isFromMock_;
1395c735df2Sopenharmony_ci    }
1405c735df2Sopenharmony_ci
1415c735df2Sopenharmony_ci    inline void SetIsFromMock(int fromMock)
1425c735df2Sopenharmony_ci    {
1435c735df2Sopenharmony_ci        isFromMock_ = fromMock;
1445c735df2Sopenharmony_ci    }
1455c735df2Sopenharmony_ci
1465c735df2Sopenharmony_ci    inline int32_t GetFloorNo() const
1475c735df2Sopenharmony_ci    {
1485c735df2Sopenharmony_ci        return floorNo_;
1495c735df2Sopenharmony_ci    }
1505c735df2Sopenharmony_ci
1515c735df2Sopenharmony_ci    inline void SetFloorNo(int32_t floorNo)
1525c735df2Sopenharmony_ci    {
1535c735df2Sopenharmony_ci        floorNo_ = floorNo;
1545c735df2Sopenharmony_ci    }
1555c735df2Sopenharmony_ci
1565c735df2Sopenharmony_ci    inline int32_t GetIsSystemApp() const
1575c735df2Sopenharmony_ci    {
1585c735df2Sopenharmony_ci        return isSystemApp_;
1595c735df2Sopenharmony_ci    }
1605c735df2Sopenharmony_ci
1615c735df2Sopenharmony_ci    inline void SetIsSystemApp(int32_t isSystemApp)
1625c735df2Sopenharmony_ci    {
1635c735df2Sopenharmony_ci        isSystemApp_ = isSystemApp;
1645c735df2Sopenharmony_ci    }
1655c735df2Sopenharmony_ci
1665c735df2Sopenharmony_ci    inline int32_t GetUncertaintyOfTimeSinceBoot() const
1675c735df2Sopenharmony_ci    {
1685c735df2Sopenharmony_ci        return uncertaintyOfTimeSinceBoot_;
1695c735df2Sopenharmony_ci    }
1705c735df2Sopenharmony_ci
1715c735df2Sopenharmony_ci    inline void SetUncertaintyOfTimeSinceBoot(int32_t uncertaintyOfTimeSinceBoot)
1725c735df2Sopenharmony_ci    {
1735c735df2Sopenharmony_ci        uncertaintyOfTimeSinceBoot_ = uncertaintyOfTimeSinceBoot;
1745c735df2Sopenharmony_ci    }
1755c735df2Sopenharmony_ci
1765c735df2Sopenharmony_ci    inline double GetFloorAccuracy() const
1775c735df2Sopenharmony_ci    {
1785c735df2Sopenharmony_ci        return floorAccuracy_;
1795c735df2Sopenharmony_ci    }
1805c735df2Sopenharmony_ci
1815c735df2Sopenharmony_ci    inline void SetFloorAccuracy(double floorAccuracy)
1825c735df2Sopenharmony_ci    {
1835c735df2Sopenharmony_ci        floorAccuracy_ = floorAccuracy;
1845c735df2Sopenharmony_ci    }
1855c735df2Sopenharmony_ci
1865c735df2Sopenharmony_ci    inline double GetAltitudeAccuracy() const
1875c735df2Sopenharmony_ci    {
1885c735df2Sopenharmony_ci        return altitudeAccuracy_;
1895c735df2Sopenharmony_ci    }
1905c735df2Sopenharmony_ci
1915c735df2Sopenharmony_ci    inline void SetAltitudeAccuracy(double altitudeAccuracy)
1925c735df2Sopenharmony_ci    {
1935c735df2Sopenharmony_ci        altitudeAccuracy_ = altitudeAccuracy;
1945c735df2Sopenharmony_ci    }
1955c735df2Sopenharmony_ci
1965c735df2Sopenharmony_ci    inline double GetSpeedAccuracy() const
1975c735df2Sopenharmony_ci    {
1985c735df2Sopenharmony_ci        return speedAccuracy_;
1995c735df2Sopenharmony_ci    }
2005c735df2Sopenharmony_ci
2015c735df2Sopenharmony_ci    inline void SetSpeedAccuracy(double speedAccuracy)
2025c735df2Sopenharmony_ci    {
2035c735df2Sopenharmony_ci        speedAccuracy_ = speedAccuracy;
2045c735df2Sopenharmony_ci    }
2055c735df2Sopenharmony_ci
2065c735df2Sopenharmony_ci    inline double GetDirectionAccuracy() const
2075c735df2Sopenharmony_ci    {
2085c735df2Sopenharmony_ci        return directionAccuracy_;
2095c735df2Sopenharmony_ci    }
2105c735df2Sopenharmony_ci
2115c735df2Sopenharmony_ci    inline void SetDirectionAccuracy(double directionAccuracy)
2125c735df2Sopenharmony_ci    {
2135c735df2Sopenharmony_ci        directionAccuracy_ = directionAccuracy;
2145c735df2Sopenharmony_ci    }
2155c735df2Sopenharmony_ci
2165c735df2Sopenharmony_ci    inline int32_t GetLocationSourceType() const
2175c735df2Sopenharmony_ci    {
2185c735df2Sopenharmony_ci        return locationSourceType_;
2195c735df2Sopenharmony_ci    }
2205c735df2Sopenharmony_ci
2215c735df2Sopenharmony_ci    inline void SetLocationSourceType(int32_t locationSourceType)
2225c735df2Sopenharmony_ci    {
2235c735df2Sopenharmony_ci        locationSourceType_ = locationSourceType;
2245c735df2Sopenharmony_ci    }
2255c735df2Sopenharmony_ci
2265c735df2Sopenharmony_ci    inline std::string GetUuid() const
2275c735df2Sopenharmony_ci    {
2285c735df2Sopenharmony_ci        return uuid_;
2295c735df2Sopenharmony_ci    }
2305c735df2Sopenharmony_ci
2315c735df2Sopenharmony_ci    inline void SetUuid(std::string uuid)
2325c735df2Sopenharmony_ci    {
2335c735df2Sopenharmony_ci        uuid_ = uuid;
2345c735df2Sopenharmony_ci    }
2355c735df2Sopenharmony_ci
2365c735df2Sopenharmony_ci    inline std::map<std::string, std::string> GetAdditionsMap() const
2375c735df2Sopenharmony_ci    {
2385c735df2Sopenharmony_ci        return additionsMap_;
2395c735df2Sopenharmony_ci    }
2405c735df2Sopenharmony_ci
2415c735df2Sopenharmony_ci    inline int32_t GetFieldValidity() const
2425c735df2Sopenharmony_ci    {
2435c735df2Sopenharmony_ci        return fieldValidity_;
2445c735df2Sopenharmony_ci    }
2455c735df2Sopenharmony_ci
2465c735df2Sopenharmony_ci    inline void SetFieldValidity(int32_t fieldValidity)
2475c735df2Sopenharmony_ci    {
2485c735df2Sopenharmony_ci        fieldValidity_ = fieldValidity;
2495c735df2Sopenharmony_ci    }
2505c735df2Sopenharmony_ci
2515c735df2Sopenharmony_ci    void ReadFromParcel(Parcel& parcel);
2525c735df2Sopenharmony_ci    bool Marshalling(Parcel& parcel) const override;
2535c735df2Sopenharmony_ci    std::string ToString() const;
2545c735df2Sopenharmony_ci    static std::unique_ptr<Location> Unmarshalling(Parcel& parcel);
2555c735df2Sopenharmony_ci    static std::shared_ptr<Location> UnmarshallingShared(Parcel& parcel);
2565c735df2Sopenharmony_ci    bool LocationEqual(const std::unique_ptr<Location>& location);
2575c735df2Sopenharmony_ci    bool AdditionEqual(const std::unique_ptr<Location>& location);
2585c735df2Sopenharmony_ci    void VectorString16ToVectorString8(const std::vector<std::u16string>& additions);
2595c735df2Sopenharmony_ci    std::vector<std::u16string> VectorString8ToVectorString16() const;
2605c735df2Sopenharmony_ciprivate:
2615c735df2Sopenharmony_ci    double latitude_;
2625c735df2Sopenharmony_ci    double longitude_;
2635c735df2Sopenharmony_ci    double altitude_;
2645c735df2Sopenharmony_ci    double accuracy_;
2655c735df2Sopenharmony_ci    double speed_;
2665c735df2Sopenharmony_ci    double direction_;
2675c735df2Sopenharmony_ci    int64_t timeStamp_;
2685c735df2Sopenharmony_ci    int64_t timeSinceBoot_;
2695c735df2Sopenharmony_ci    std::vector<std::string> additions_;
2705c735df2Sopenharmony_ci    int64_t additionSize_;
2715c735df2Sopenharmony_ci    bool isFromMock_;
2725c735df2Sopenharmony_ci    int32_t isSystemApp_;
2735c735df2Sopenharmony_ci    int32_t floorNo_;
2745c735df2Sopenharmony_ci    double floorAccuracy_;
2755c735df2Sopenharmony_ci    std::map<std::string, std::string> additionsMap_;
2765c735df2Sopenharmony_ci    double altitudeAccuracy_;
2775c735df2Sopenharmony_ci    double speedAccuracy_;
2785c735df2Sopenharmony_ci    double directionAccuracy_;
2795c735df2Sopenharmony_ci    int64_t uncertaintyOfTimeSinceBoot_;
2805c735df2Sopenharmony_ci    int32_t locationSourceType_;
2815c735df2Sopenharmony_ci    std::string uuid_;
2825c735df2Sopenharmony_ci    int32_t fieldValidity_;
2835c735df2Sopenharmony_ci};
2845c735df2Sopenharmony_ci} // namespace Location
2855c735df2Sopenharmony_ci} // namespace OHOS
2865c735df2Sopenharmony_ci#endif // LOCATION_H