1 /*
2  * Copyright (c) 2022-2023 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 
16 #ifndef RESSCHED_SCHED_CONTROLLER_OBSERVER_INCLUDE_OBSERVER_MANAGER_H
17 #define RESSCHED_SCHED_CONTROLLER_OBSERVER_INCLUDE_OBSERVER_MANAGER_H
18 
19 #include <memory>
20 #include "account_observer.h"
21 #include "if_system_ability_manager.h"
22 #include "system_ability_status_change_stub.h"
23 #include "singleton.h"
24 #ifdef RESSCHED_AUDIO_FRAMEWORK_ENABLE
25 #include "audio_observer.h"
26 #endif
27 #include "hisysevent_observer.h"
28 #include "connection_subscriber.h"
29 #ifdef DEVICE_MOVEMENT_PERCEPTION_ENABLE
30 #include "device_movement_observer.h"
31 #endif
32 #ifdef RESSCHED_TELEPHONY_STATE_REGISTRY_ENABLE
33 #include "sched_telephony_observer.h"
34 #endif
35 #include "mmi_observer.h"
36 #ifdef RESSCHED_MULTIMEDIA_AV_SESSION_ENABLE
37 #include "av_session_state_listener.h"
38 #endif
39 #include "fold_display_mode_observer.h"
40 #ifdef RESSCHED_REQUEST_REQUEST
41 #include "download_upload_observer.h"
42 #endif
43 
44 namespace OHOS {
45 namespace ResourceSchedule {
46 using ReportFunc = bool (*)();
47 class ObserverManager : public DelayedSingleton<ObserverManager>,
48     public std::enable_shared_from_this<ObserverManager> {
49 public:
ObserverManager()50     ObserverManager() {}
~ObserverManager()51     ~ObserverManager() {}
52     void Init();
53     void Disable();
54 
55 private:
56 class SystemAbilityStatusChangeListener : public OHOS::SystemAbilityStatusChangeStub {
57 public:
SystemAbilityStatusChangeListener()58     SystemAbilityStatusChangeListener() {};
59     virtual void OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override;
60     virtual void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override;
61 };
62 
63     void InitHiSysEventObserver();
64     void DisableHiSysEventObserver();
65     void InitTelephonyObserver();
66     void DisableTelephonyObserver();
67     void InitAudioObserver();
68     void DisableAudioObserver();
69     void InitDeviceMovementObserver();
70     void DisableDeviceMovementObserver();
71     void InitMMiEventObserver();
72     void DisableMMiEventObserver();
73     void InitDisplayModeObserver();
74     void DisableDisplayModeObserver();
75     void InitSysAbilityListener();
76     void AddItemToSysAbilityListener(int32_t systemAbilityId, sptr<ISystemAbilityManager>& systemAbilityManager);
77     void GetAllMmiStatusData();
78     void InitObserverCbMap();
79     void InitConnectionSubscriber();
80     void DisableConnectionSubscriber();
81     void GetReportFunc();
82     void InitDataShareObserver();
83     void DisableDataShareObserver();
84     void InitAccountObserver();
85     void DisableAccountObserver();
86 #ifdef RESSCHED_REQUEST_REQUEST
87     void InitDownloadUploadObserver();
88     void DisableDownloadUploadObserver();
89 #endif
90 
91 #ifdef RESSCHED_MULTIMEDIA_AV_SESSION_ENABLE
92     void InitAVSessionStateChangeListener();
93     void DisableAVSessionStateChangeListener();
94     std::shared_ptr<AvSessionStateListener> avSessionStateListener_ = nullptr;
95 #endif
96 
97     pid_t pid_ = -1;
98     std::map<int32_t, std::function<void(std::shared_ptr<ObserverManager>)>> handleObserverMap_;
99     std::map<int32_t, std::function<void(std::shared_ptr<ObserverManager>)>> removeObserverMap_;
100     std::shared_ptr<HiviewDFX::HiSysEventListener> hiSysEventObserver_ = nullptr;
101 #ifdef RESSCHED_TELEPHONY_STATE_REGISTRY_ENABLE
102     int32_t slotId_ = 0;
103     sptr<SchedTelephonyObserver> telephonyObserver_ = nullptr;
104 #endif
105 #ifdef RESSCHED_AUDIO_FRAMEWORK_ENABLE
106     std::shared_ptr<AudioObserver> audioObserver_ = nullptr;
107 #endif
108 #ifdef DEVICE_MOVEMENT_PERCEPTION_ENABLE
109     sptr<DeviceMovementObserver> deviceMovementObserver_ = nullptr;
110 #endif
111     sptr<SystemAbilityStatusChangeListener> sysAbilityListener_ = nullptr;
112     std::shared_ptr<MmiObserver> mmiEventObserver_ = nullptr;
113     std::shared_ptr<ConnectionSubscriber> connectionSubscriber_ = nullptr;
114     sptr<FoldDisplayModeObserver> foldDisplayModeObserver_ = nullptr;
115 #ifdef RESSCHED_REQUEST_REQUEST
116     std::shared_ptr<DownLoadUploadObserver> downLoadUploadObserver_ = nullptr;
117 #endif
118     std::shared_ptr<AccountObserver> accountObserver_ = nullptr;
119     bool isNeedReport_ = true;
120 };
121 } // namespace ResourceSchedule
122 } // namespace OHOS
123 #endif // RESSCHED_SCHED_CONTROLLER_OBSERVER_INCLUDE_OBSERVER_MANAGER_H
124