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 
16 #ifndef ACCESSIBILITY_COMMON_HELPER_H
17 #define ACCESSIBILITY_COMMON_HELPER_H
18 
19 #include <atomic>
20 #include <chrono>
21 #include <functional>
22 #include <thread>
23 
24 namespace OHOS {
25 namespace Accessibility {
26 namespace {
27     constexpr int32_t WAIT_PUBLISH_SLEEPTIME = 10;
28     constexpr int32_t WAIT_LOOP_SLEEPTIME = 100;
29 } // namespace
30 
31 class AccessibilityCommonHelper {
32 public:
GetInstance()33     static AccessibilityCommonHelper& GetInstance()
34     {
35         static AccessibilityCommonHelper helper;
36         return helper;
37     }
38 
GetIsServicePublished()39     bool GetIsServicePublished()
40     {
41         return isServicePublished_;
42     }
43 
SetIsServicePublished(bool publish)44     void SetIsServicePublished(bool publish)
45     {
46         isServicePublished_ = publish;
47     }
48 
WaitForServicePublish()49     void WaitForServicePublish()
50     {
51         while (1) {
52             std::this_thread::sleep_for(std::chrono::milliseconds(WAIT_PUBLISH_SLEEPTIME));
53             if (isServicePublished_) {
54                 return;
55             }
56         }
57     }
58 
WaitForLoop(const std::function<bool ()> & compare,int32_t timeout)59     bool WaitForLoop(const std::function<bool()> &compare, int32_t timeout)
60     {
61         int32_t count = timeout * 1000 / WAIT_LOOP_SLEEPTIME;
62         while (count > 0) {
63             std::this_thread::sleep_for(std::chrono::milliseconds(WAIT_LOOP_SLEEPTIME));
64             if (compare() == true) {
65                 return true;
66             } else {
67                 count--;
68             }
69         }
70         return false;
71     }
72 
SetRemoteObjectNotNullFlag(bool flag)73     void SetRemoteObjectNotNullFlag(bool flag)
74     {
75         isRemoteObjectNotNulll_ = flag;
76     }
77 
GetRemoteObjectNotNullFlag()78     bool GetRemoteObjectNotNullFlag() const
79     {
80         return isRemoteObjectNotNulll_;
81     }
82 
83 private:
84     bool isServicePublished_ = false;
85     bool isRemoteObjectNotNulll_ = false;
86 };
87 } // namespace Accessibility
88 } // namespace OHOS
89 #endif // ACCESSIBILITY_COMMON_HELPER_H