1  /*
2   * Copyright (c) 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 OHOS_ABILITY_RUNTIME_ABILITY_FOREGROUND_STATE_OBSERVER_STUB_H
17  #define OHOS_ABILITY_RUNTIME_ABILITY_FOREGROUND_STATE_OBSERVER_STUB_H
18  
19  #include <map>
20  #include <mutex>
21  
22  #include "ability_foreground_state_observer_interface.h"
23  #include "ability_state_data.h"
24  #include "iremote_stub.h"
25  
26  namespace OHOS {
27  namespace AppExecFwk {
28  class AbilityForegroundStateObserverStub : public IRemoteStub<IAbilityForegroundStateObserver> {
29  public:
30      AbilityForegroundStateObserverStub();
31      virtual ~AbilityForegroundStateObserverStub();
32  
33      int32_t OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override;
34  
35  private:
36      int32_t HandleOnAbilityStateChanged(MessageParcel &data, MessageParcel &reply);
37  
38      static std::mutex callbackMutex_;
39  
40      DISALLOW_COPY_AND_MOVE(AbilityForegroundStateObserverStub);
41  };
42  
43  /**
44   * @class AppForegroundStateObserverRecipient
45   * AppForegroundStateObserverRecipient notices IRemoteBroker died.
46   */
47  class AbilityForegroundStateObserverRecipient : public IRemoteObject::DeathRecipient {
48  public:
49      using RemoteDiedHandler = std::function<void(const wptr<IRemoteObject> &)>;
50      explicit AbilityForegroundStateObserverRecipient(RemoteDiedHandler handler);
51      virtual ~AbilityForegroundStateObserverRecipient() = default;
52      void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
53  
54  private:
55      RemoteDiedHandler handler_;
56  };
57  } // namespace AppExecFwk
58  } // namespace OHOS
59  #endif // OHOS_ABILITY_RUNTIME_ABILITY_FOREGROUND_STATE_OBSERVER_STUB_H
60