10826e83eSopenharmony_ci/*
20826e83eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
30826e83eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40826e83eSopenharmony_ci * you may not use this file except in compliance with the License.
50826e83eSopenharmony_ci * You may obtain a copy of the License at
60826e83eSopenharmony_ci *
70826e83eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
80826e83eSopenharmony_ci *
90826e83eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100826e83eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110826e83eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120826e83eSopenharmony_ci * See the License for the specific language governing permissions and
130826e83eSopenharmony_ci * limitations under the License.
140826e83eSopenharmony_ci */
150826e83eSopenharmony_ci
160826e83eSopenharmony_ci#ifndef LOCATION_ADAPTER_H
170826e83eSopenharmony_ci#define LOCATION_ADAPTER_H
180826e83eSopenharmony_ci
190826e83eSopenharmony_ci#include <cstdint>
200826e83eSopenharmony_ci#include <memory>
210826e83eSopenharmony_ci#include <sys/types.h>
220826e83eSopenharmony_ci
230826e83eSopenharmony_cinamespace OHOS::NWeb {
240826e83eSopenharmony_ci
250826e83eSopenharmony_ciclass LocationRequestConfig {
260826e83eSopenharmony_cipublic:
270826e83eSopenharmony_ci    enum Priority {
280826e83eSopenharmony_ci        PRIORITY_UNSET = 0,
290826e83eSopenharmony_ci        PRIORITY_ACCURACY,
300826e83eSopenharmony_ci        PRIORITY_LOW_POWER,
310826e83eSopenharmony_ci        PRIORITY_FAST_FIRST_FIX,
320826e83eSopenharmony_ci    };
330826e83eSopenharmony_ci
340826e83eSopenharmony_ci    enum Scenario {
350826e83eSopenharmony_ci        UNSET = 0,
360826e83eSopenharmony_ci        NAVIGATION,
370826e83eSopenharmony_ci        TRAJECTORY_TRACKING,
380826e83eSopenharmony_ci        CAR_HAILING,
390826e83eSopenharmony_ci        DAILY_LIFE_SERVICE,
400826e83eSopenharmony_ci        NO_POWER,
410826e83eSopenharmony_ci    };
420826e83eSopenharmony_ci
430826e83eSopenharmony_ci    LocationRequestConfig() = default;
440826e83eSopenharmony_ci
450826e83eSopenharmony_ci    virtual ~LocationRequestConfig() = default;
460826e83eSopenharmony_ci
470826e83eSopenharmony_ci    virtual void SetScenario(int32_t scenario) = 0;
480826e83eSopenharmony_ci
490826e83eSopenharmony_ci    virtual void SetFixNumber(int32_t number) = 0;
500826e83eSopenharmony_ci
510826e83eSopenharmony_ci    virtual void SetMaxAccuracy(int32_t maxAccuary) = 0;
520826e83eSopenharmony_ci
530826e83eSopenharmony_ci    virtual void SetDistanceInterval(int32_t disInterval) = 0;
540826e83eSopenharmony_ci
550826e83eSopenharmony_ci    virtual void SetTimeInterval(int32_t timeInterval) = 0;
560826e83eSopenharmony_ci
570826e83eSopenharmony_ci    virtual void SetPriority(int32_t priority) = 0;
580826e83eSopenharmony_ci};
590826e83eSopenharmony_ci
600826e83eSopenharmony_ciclass LocationInfo {
610826e83eSopenharmony_cipublic:
620826e83eSopenharmony_ci    LocationInfo() = default;
630826e83eSopenharmony_ci
640826e83eSopenharmony_ci    virtual ~LocationInfo() = default;
650826e83eSopenharmony_ci
660826e83eSopenharmony_ci    virtual double GetLatitude() = 0;
670826e83eSopenharmony_ci
680826e83eSopenharmony_ci    virtual double GetLongitude() = 0;
690826e83eSopenharmony_ci
700826e83eSopenharmony_ci    virtual double GetAltitude() = 0;
710826e83eSopenharmony_ci
720826e83eSopenharmony_ci    virtual float GetAccuracy() = 0;
730826e83eSopenharmony_ci
740826e83eSopenharmony_ci    virtual float GetSpeed() = 0;
750826e83eSopenharmony_ci
760826e83eSopenharmony_ci    virtual double GetDirection() = 0;
770826e83eSopenharmony_ci
780826e83eSopenharmony_ci    virtual int64_t GetTimeStamp() = 0;
790826e83eSopenharmony_ci
800826e83eSopenharmony_ci    virtual int64_t GetTimeSinceBoot() = 0;
810826e83eSopenharmony_ci
820826e83eSopenharmony_ci    virtual std::vector<std::string> GetAdditions() = 0;
830826e83eSopenharmony_ci};
840826e83eSopenharmony_ci
850826e83eSopenharmony_ciclass LocationCallbackAdapter {
860826e83eSopenharmony_cipublic:
870826e83eSopenharmony_ci    LocationCallbackAdapter() = default;
880826e83eSopenharmony_ci
890826e83eSopenharmony_ci    virtual ~LocationCallbackAdapter() = default;
900826e83eSopenharmony_ci
910826e83eSopenharmony_ci    virtual void OnLocationReport(const std::shared_ptr<LocationInfo> location) = 0;
920826e83eSopenharmony_ci
930826e83eSopenharmony_ci    virtual void OnLocatingStatusChange(const int status) = 0;
940826e83eSopenharmony_ci
950826e83eSopenharmony_ci    virtual void OnErrorReport(const int errorCode) = 0;
960826e83eSopenharmony_ci};
970826e83eSopenharmony_ci
980826e83eSopenharmony_ciclass LocationProxyAdapter {
990826e83eSopenharmony_cipublic:
1000826e83eSopenharmony_ci    LocationProxyAdapter() = default;
1010826e83eSopenharmony_ci
1020826e83eSopenharmony_ci    virtual ~LocationProxyAdapter() = default;
1030826e83eSopenharmony_ci
1040826e83eSopenharmony_ci    virtual int32_t StartLocating(
1050826e83eSopenharmony_ci        std::shared_ptr<LocationRequestConfig> requestConfig, std::shared_ptr<LocationCallbackAdapter> callback) = 0;
1060826e83eSopenharmony_ci
1070826e83eSopenharmony_ci    virtual bool StopLocating(int32_t callbackId) = 0;
1080826e83eSopenharmony_ci
1090826e83eSopenharmony_ci    virtual bool EnableAbility(bool isEnabled) = 0;
1100826e83eSopenharmony_ci
1110826e83eSopenharmony_ci    virtual bool IsLocationEnabled() = 0;
1120826e83eSopenharmony_ci};
1130826e83eSopenharmony_ci
1140826e83eSopenharmony_ciclass LocationInstance {
1150826e83eSopenharmony_cipublic:
1160826e83eSopenharmony_ci    static LocationInstance& GetInstance();
1170826e83eSopenharmony_ci
1180826e83eSopenharmony_ci    virtual ~LocationInstance() = default;
1190826e83eSopenharmony_ci
1200826e83eSopenharmony_ci    virtual std::shared_ptr<LocationProxyAdapter> CreateLocationProxyAdapter() = 0;
1210826e83eSopenharmony_ci
1220826e83eSopenharmony_ci    virtual std::shared_ptr<LocationRequestConfig> CreateLocationRequestConfig() = 0;
1230826e83eSopenharmony_ci};
1240826e83eSopenharmony_ci
1250826e83eSopenharmony_ci} // namespace OHOS::NWeb
1260826e83eSopenharmony_ci
1270826e83eSopenharmony_ci#endif
128