1 /*
2  * Copyright (c) 2024 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 OHOS_ABILITY_RUNTIME_RENDER_STATE_OBSERVER_MANAGER_H
17 #define OHOS_ABILITY_RUNTIME_RENDER_STATE_OBSERVER_MANAGER_H
18 
19 #include <vector>
20 #include "app_running_record.h"
21 #include "irender_state_observer.h"
22 #include "singleton.h"
23 #include "task_handler_wrap.h"
24 
25 namespace OHOS {
26 namespace AppExecFwk {
27 class RenderStateObserverManager : public std::enable_shared_from_this<RenderStateObserverManager> {
28     DECLARE_DELAYED_SINGLETON(RenderStateObserverManager);
29 public:
30     void Init();
31     int32_t RegisterRenderStateObserver(const sptr<IRenderStateObserver> &observer);
32     int32_t UnregisterRenderStateObserver(const sptr<IRenderStateObserver> &observer);
33     int32_t OnRenderStateChanged(const std::shared_ptr<RenderRecord> &renderRecord, int32_t state);
34 private:
35     void OnObserverDied(const wptr<IRemoteObject> &remote);
36     void HandleRegisterRenderStateObserver(const sptr<IRenderStateObserver> &observer);
37     void HandleUnregisterRenderStateObserver(const sptr<IRenderStateObserver> &observer);
38     void HandleOnRenderStateChanged(const std::shared_ptr<RenderRecord> &renderRecord, int32_t state);
39     RenderStateData WrapRenderStateData(const std::shared_ptr<RenderRecord> &renderRecord,
40         int32_t state);
41 
42     sptr<IRemoteObject::DeathRecipient> deathRecipient_;
43     std::vector<sptr<IRenderStateObserver>> observerList_;
44     std::shared_ptr<AAFwk::TaskHandlerWrap> handler_;
45 };
46 
47 class RenderStateObserverRecipient : public IRemoteObject::DeathRecipient {
48 public:
49     using RemoteDiedHandler = std::function<void(const wptr<IRemoteObject> &)>;
50     explicit RenderStateObserverRecipient(RemoteDiedHandler handler);
51     virtual ~RenderStateObserverRecipient();
52     virtual void OnRemoteDied(const wptr<IRemoteObject> &remote);
53 private:
54     RemoteDiedHandler handler_;
55 };
56 } // namespace AppExecFwk
57 } // namespace OHOS
58 
59 #endif // OHOS_ABILITY_RUNTIME_RENDER_STATE_OBSERVER_MANAGER_H
60