• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 #include "watermark_observer_manager.h"
17 
18 #include "system_ability_definition.h"
19 
20 namespace OHOS {
21 namespace EDM {
22 WatermarkObserverManager* WatermarkObserverManager::instance_;
23 std::once_flag WatermarkObserverManager::flag_;
24 
GetInstance()25 WatermarkObserverManager* WatermarkObserverManager::GetInstance()
26 {
27     EDMLOGI("WatermarkObserverManager::GetInstance");
28     std::call_once(flag_, []() {
29         if (instance_ == nullptr) {
30             instance_ = new (std::nothrow) WatermarkObserverManager();
31         }
32     });
33     IWatermarkObserverManager::observerInstance_ = instance_;
34     return instance_;
35 }
36 
SubscribeAppStateObserver()37 bool WatermarkObserverManager::SubscribeAppStateObserver()
38 {
39     EDMLOGI("WatermarkObserverManager SubscribeAppStateObserver start");
40     if (observer_) {
41         EDMLOGD("WatermarkObserverManager has subscribed");
42         return true;
43     }
44     observer_ = new (std::nothrow) WatermarkApplicationObserver();
45     auto appManager = GetAppManager();
46     if (!observer_ || !appManager) {
47         EDMLOGE("register WatermarkApplicationObserver fail!");
48         observer_.clear();
49         observer_ = nullptr;
50         return false;
51     }
52     if (appManager->RegisterApplicationStateObserver(observer_) != ERR_OK) {
53         EDMLOGE("register WatermarkApplicationObserver fail!");
54         observer_.clear();
55         observer_ = nullptr;
56         return false;
57     }
58     return true;
59 }
60 
UnSubscribeAppStateObserver()61 bool WatermarkObserverManager::UnSubscribeAppStateObserver()
62 {
63     EDMLOGI("WatermarkObserverManager UnSubscribeAppStateObserver start");
64     if (!observer_) {
65         EDMLOGD("WatermarkObserverManager has unsubscribed");
66         return true;
67     }
68     auto appManager = GetAppManager();
69     if (!appManager) {
70         EDMLOGE("appManager null");
71         return false;
72     }
73     if (appManager->UnregisterApplicationStateObserver(observer_) != ERR_OK) {
74         EDMLOGE("Unregister WatermarkApplicationObserver fail!");
75         return false;
76     }
77     observer_.clear();
78     observer_ = nullptr;
79     return true;
80 }
81 
GetAppManager()82 sptr<AppExecFwk::IAppMgr> WatermarkObserverManager::GetAppManager()
83 {
84     auto remoteObject = EdmSysManager::GetRemoteObjectOfSystemAbility(APP_MGR_SERVICE_ID);
85     return iface_cast<AppExecFwk::IAppMgr>(remoteObject);
86 }
87 } // namespace EDM
88 } // namespace OHOS