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 COOPERATE_STATE_MACHINE_H 17 #define COOPERATE_STATE_MACHINE_H 18 19 #include "nocopyable.h" 20 21 #include "accesstoken_kit.h" 22 #include "app_mgr_interface.h" 23 #include "application_state_observer_stub.h" 24 #include "iapplication_state_observer.h" 25 26 #include "i_common_event_adapter.h" 27 #include "i_cooperate_state.h" 28 29 namespace OHOS { 30 namespace Msdp { 31 namespace DeviceStatus { 32 namespace Cooperate { 33 class StateMachine final : public IStateMachine { 34 public: 35 StateMachine(IContext *env); 36 ~StateMachine() = default; 37 DISALLOW_COPY_AND_MOVE(StateMachine); 38 39 void OnEvent(Context &context, const CooperateEvent &event); 40 41 private: 42 class AppStateObserver final : public AppExecFwk::ApplicationStateObserverStub { 43 public: 44 AppStateObserver(Channel<CooperateEvent>::Sender sender, int32_t clientPid); 45 ~AppStateObserver() = default; 46 void OnProcessDied(const AppExecFwk::ProcessData &processData) override; 47 void UpdateClientPid(int32_t clientPid); 48 49 private: 50 Channel<CooperateEvent>::Sender sender_; 51 int32_t clientPid_; 52 }; 53 54 private: 55 void TransiteTo(Context &context, CooperateState state) override; 56 void AddHandler(CooperateEventType event, std::function<void(Context&, const CooperateEvent&)> handler); 57 void OnQuit(Context &context); 58 void AddObserver(Context &context, const CooperateEvent &event); 59 void RemoveObserver(Context &context, const CooperateEvent &event); 60 void RegisterListener(Context &context, const CooperateEvent &event); 61 void UnregisterListener(Context &context, const CooperateEvent &event); 62 void RegisterHotAreaListener(Context &context, const CooperateEvent &event); 63 void UnregisterHotAreaListener(Context &context, const CooperateEvent &event); 64 void EnableCooperate(Context &context, const CooperateEvent &event); 65 void DisableCooperate(Context &context, const CooperateEvent &event); 66 void StartCooperate(Context &context, const CooperateEvent &event); 67 void GetCooperateState(Context &context, const CooperateEvent &event); 68 void RegisterEventListener(Context &context, const CooperateEvent &event); 69 void UnregisterEventListener(Context &context, const CooperateEvent &event); 70 void OnBoardOnline(Context &context, const CooperateEvent &event); 71 void OnBoardOffline(Context &context, const CooperateEvent &event); 72 void OnProfileChanged(Context &context, const CooperateEvent &event); 73 void OnPointerEvent(Context &context, const CooperateEvent &event); 74 void OnSoftbusSubscribeMouseLocation(Context &context, const CooperateEvent &event); 75 void OnProcessClientDied(Context &context, const CooperateEvent &event); 76 void OnSoftbusUnSubscribeMouseLocation(Context &context, const CooperateEvent &event); 77 void OnSoftbusReplySubscribeMouseLocation(Context &context, const CooperateEvent &event); 78 void OnSoftbusReplyUnSubscribeMouseLocation(Context &context, const CooperateEvent &event); 79 void OnSoftbusMouseLocation(Context &context, const CooperateEvent &event); 80 void OnSoftbusSessionClosed(Context &context, const CooperateEvent &event); 81 void OnSoftbusSessionOpened(Context &context, const CooperateEvent &event); 82 void OnHotPlugEvent(Context &context, const CooperateEvent &event); 83 void OnRemoteStart(Context &context, const CooperateEvent &event); 84 void OnRemoteHotPlug(Context &context, const CooperateEvent &event); 85 void OnRemoteInputDevice(Context &context, const CooperateEvent &event); 86 void Transfer(Context &context, const CooperateEvent &event); 87 sptr<AppExecFwk::IAppMgr> GetAppMgr(); 88 int32_t RegisterApplicationStateObserver(Channel<CooperateEvent>::Sender sender, const EnableCooperateEvent &event); 89 std::string GetPackageName(Security::AccessToken::AccessTokenID tokenId); 90 void UnregisterApplicationStateObserver(); 91 void UpdateApplicationStateObserver(int32_t clientPid); 92 void AddSessionObserver(Context &context, const EnableCooperateEvent &event); 93 void RemoveSessionObserver(Context &context, const DisableCooperateEvent &event); 94 void OnCommonEvent(Context &context, const std::string &commonEvent); 95 void AddMonitor(Context &context); 96 void RemoveMonitor(Context &context); 97 void RemoveWatches(Context &context); 98 99 IContext *env_ { nullptr }; 100 std::map<CooperateEventType, std::function<void(Context&, const CooperateEvent&)>> handlers_; 101 size_t current_ { COOPERATE_STATE_FREE }; 102 std::array<std::shared_ptr<ICooperateState>, N_COOPERATE_STATES> states_; 103 std::set<std::string> onlineBoards_; 104 int32_t monitorId_ { -1 }; 105 std::vector<std::string> clientBundleNames_; 106 sptr<AppStateObserver> appStateObserver_ { nullptr }; 107 std::shared_ptr<ICommonEventObserver> observer_ { nullptr }; 108 }; 109 } // namespace Cooperate 110 } // namespace DeviceStatus 111 } // namespace Msdp 112 } // namespace OHOS 113 #endif // COOPERATE_STATE_MACHINE_H 114