1 /*
2  * Copyright (C) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef LOCATOR_H
16 #define LOCATOR_H
17 
18 #include <list>
19 #include <vector>
20 
21 #include "iremote_object.h"
22 
23 #include "constant_definition.h"
24 #include "country_code.h"
25 #include "geo_address.h"
26 #include "geo_coding_mock_info.h"
27 #include "i_cached_locations_callback.h"
28 #include "i_locator_callback.h"
29 #include "location.h"
30 #include "locator_impl.h"
31 #include "request_config.h"
32 
33 namespace OHOS {
34 namespace Location {
35 class Locator {
36 public:
37     static std::shared_ptr<LocatorImpl> GetInstance();
38     virtual ~Locator();
39     virtual bool IsLocationEnabled() = 0;
40     virtual void RequestEnableLocation() = 0;
41     virtual void EnableAbility(bool enable) = 0;
42     virtual void StartLocating(std::unique_ptr<RequestConfig>& requestConfig,
43         sptr<ILocatorCallback>& callback) = 0;
44     virtual void StopLocating(sptr<ILocatorCallback>& callback) = 0;
45     virtual std::unique_ptr<Location> GetCachedLocation() = 0;
46     virtual bool RegisterSwitchCallback(const sptr<IRemoteObject>& callback, pid_t uid) = 0;
47     virtual bool UnregisterSwitchCallback(const sptr<IRemoteObject>& callback) = 0;
48     virtual void ShowNotification() = 0;
49     virtual void RequestPermission() = 0;
50     virtual bool IsGeoServiceAvailable() = 0;
51     virtual void GetAddressByCoordinate(MessageParcel &data, std::list<std::shared_ptr<GeoAddress>>& replyList) = 0;
52     virtual void GetAddressByLocationName(MessageParcel &data, std::list<std::shared_ptr<GeoAddress>>& replyList) = 0;
53     virtual bool IsLocationPrivacyConfirmed(const int type) = 0;
54     virtual int SetLocationPrivacyConfirmStatus(const int type, bool isConfirmed) = 0;
55     virtual bool RegisterGnssStatusCallback(const sptr<IRemoteObject>& callback, pid_t uid) = 0;
56     virtual bool UnregisterGnssStatusCallback(const sptr<IRemoteObject>& callback) = 0;
57     virtual bool RegisterNmeaMessageCallback(const sptr<IRemoteObject>& callback, pid_t uid) = 0;
58     virtual bool UnregisterNmeaMessageCallback(const sptr<IRemoteObject>& callback) = 0;
59     virtual bool RegisterCountryCodeCallback(const sptr<IRemoteObject>& callback, pid_t uid) = 0;
60     virtual bool UnregisterCountryCodeCallback(const sptr<IRemoteObject>& callback) = 0;
61     virtual void RegisterCachedLocationCallback(std::unique_ptr<CachedGnssLocationsRequest>& request,
62         sptr<ICachedLocationsCallback>& callback) = 0;
63     virtual void UnregisterCachedLocationCallback(sptr<ICachedLocationsCallback>& callback) = 0;
64     virtual int GetCachedGnssLocationsSize() = 0;
65     virtual int FlushCachedGnssLocations() = 0;
66     virtual bool SendCommand(std::unique_ptr<LocationCommand>& commands) = 0;
67     virtual bool EnableReverseGeocodingMock() = 0;
68     virtual bool DisableReverseGeocodingMock() = 0;
69     virtual bool SetReverseGeocodingMockInfo(std::vector<std::shared_ptr<GeocodingMockInfo>>& mockInfo) = 0;
70     virtual std::shared_ptr<CountryCode> GetIsoCountryCode() = 0;
71     virtual bool EnableLocationMock() = 0;
72     virtual bool DisableLocationMock() = 0;
73     virtual bool SetMockedLocations(
74         const int timeInterval, const std::vector<std::shared_ptr<Location>> &location) = 0;
75 
76     virtual LocationErrCode IsLocationEnabledV9(bool &isEnabled) = 0;
77     virtual LocationErrCode EnableAbilityV9(bool enable) = 0;
78     virtual LocationErrCode StartLocatingV9(std::unique_ptr<RequestConfig>& requestConfig,
79         sptr<ILocatorCallback>& callback) = 0;
80     virtual LocationErrCode StopLocatingV9(sptr<ILocatorCallback>& callback) = 0;
81     virtual LocationErrCode GetCachedLocationV9(std::unique_ptr<Location> &loc) = 0;
82     virtual LocationErrCode RegisterSwitchCallbackV9(const sptr<IRemoteObject>& callback) = 0;
83     virtual LocationErrCode UnregisterSwitchCallbackV9(const sptr<IRemoteObject>& callback) = 0;
84     virtual LocationErrCode IsGeoServiceAvailableV9(bool &isAvailable) = 0;
85     virtual LocationErrCode GetAddressByCoordinateV9(MessageParcel &data,
86         std::list<std::shared_ptr<GeoAddress>>& replyList) = 0;
87     virtual LocationErrCode GetAddressByLocationNameV9(MessageParcel &data,
88         std::list<std::shared_ptr<GeoAddress>>& replyList) = 0;
89     virtual LocationErrCode IsLocationPrivacyConfirmedV9(const int type, bool &isConfirmed) = 0;
90     virtual LocationErrCode SetLocationPrivacyConfirmStatusV9(const int type, bool isConfirmed) = 0;
91     virtual LocationErrCode RegisterGnssStatusCallbackV9(const sptr<IRemoteObject>& callback) = 0;
92     virtual LocationErrCode UnregisterGnssStatusCallbackV9(const sptr<IRemoteObject>& callback) = 0;
93     virtual LocationErrCode RegisterNmeaMessageCallbackV9(const sptr<IRemoteObject>& callback) = 0;
94     virtual LocationErrCode UnregisterNmeaMessageCallbackV9(const sptr<IRemoteObject>& callback) = 0;
95     virtual LocationErrCode RegisterCountryCodeCallbackV9(const sptr<IRemoteObject>& callback) = 0;
96     virtual LocationErrCode UnregisterCountryCodeCallbackV9(const sptr<IRemoteObject>& callback) = 0;
97     virtual LocationErrCode RegisterCachedLocationCallbackV9(std::unique_ptr<CachedGnssLocationsRequest>& request,
98         sptr<ICachedLocationsCallback>& callback) = 0;
99     virtual LocationErrCode UnregisterCachedLocationCallbackV9(sptr<ICachedLocationsCallback>& callback) = 0;
100     virtual LocationErrCode GetCachedGnssLocationsSizeV9(int &size) = 0;
101     virtual LocationErrCode FlushCachedGnssLocationsV9() = 0;
102     virtual LocationErrCode SendCommandV9(std::unique_ptr<LocationCommand>& commands) = 0;
103     virtual LocationErrCode EnableReverseGeocodingMockV9() = 0;
104     virtual LocationErrCode DisableReverseGeocodingMockV9() = 0;
105     virtual LocationErrCode SetReverseGeocodingMockInfoV9(
106         std::vector<std::shared_ptr<GeocodingMockInfo>>& mockInfo) = 0;
107     virtual LocationErrCode GetIsoCountryCodeV9(std::shared_ptr<CountryCode>& countryCode) = 0;
108     virtual LocationErrCode EnableLocationMockV9() = 0;
109     virtual LocationErrCode DisableLocationMockV9() = 0;
110     virtual LocationErrCode SetMockedLocationsV9(
111         const int timeInterval, const std::vector<std::shared_ptr<Location>> &location) = 0;
112     virtual LocationErrCode ProxyForFreeze(std::set<int> pidList, bool isProxy) = 0;
113     virtual LocationErrCode ResetAllProxy() = 0;
114 private:
115     static std::shared_ptr<LocatorImpl> instance_;
116     static std::mutex mutex_;
117 };
118 } // namespace Location
119 } // namespace OHOS
120 
121 #endif // LOCATOR_H
122