1 /* 2 * Copyright (c) 2021 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 ABILITY_CONTEXT_ABILITY_H_ 17 #define ABILITY_CONTEXT_ABILITY_H_ 18 19 #include "ability_connect_callback_proxy.h" 20 #include "ability_connect_callback_stub.h" 21 #include "ability_loader.h" 22 #include "base_ability.h" 23 #include "common_event.h" 24 #include "common_event_manager.h" 25 26 namespace OHOS { 27 namespace AppExecFwk { 28 typedef std::map<std::string, std::string> MAP_STR_STR; 29 class AbilityContextConnectCallback : public AAFwk::AbilityConnectionStub { 30 public: AsObject()31 sptr<IRemoteObject> AsObject() override 32 { 33 return nullptr; 34 } 35 /** 36 * OnAbilityConnectDone, AbilityMs notify caller ability the result of connect. 37 * 38 * @param element,.service ability's ElementName. 39 * @param remoteObject,.the session proxy of service ability. 40 * @param resultCode, ERR_OK on success, others on failure. 41 */ OnAbilityConnectDone(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject,int resultCode)42 void OnAbilityConnectDone( 43 const AppExecFwk::ElementName &element, const sptr<IRemoteObject> &remoteObject, int resultCode) override 44 { 45 if (resultCode == 0) { 46 onAbilityConnectDoneCount++; 47 } 48 } 49 50 /** 51 * OnAbilityDisconnectDone, AbilityMs notify caller ability the result of disconnect. 52 * 53 * @param element,.service ability's ElementName. 54 * @param resultCode, ERR_OK on success, others on failure. 55 */ OnAbilityDisconnectDone(const AppExecFwk::ElementName & element,int resultCode)56 void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override 57 { 58 if (resultCode == 0) { 59 onAbilityConnectDoneCount--; 60 } 61 } 62 63 static size_t onAbilityConnectDoneCount; 64 }; 65 size_t AbilityContextConnectCallback::onAbilityConnectDoneCount = 0; 66 67 class AbilityContextAbilityEventSubscriber; 68 class AbilityContextAbility : public BaseAbility { 69 public: 70 ~AbilityContextAbility(); 71 static int sequenceNumber_; 72 void TestConnectAbility(); 73 void TestStopAbility(); 74 void TestDisconnectAbility(); 75 void TestStartAbility(); 76 void TestTerminateAbility(); 77 78 protected: 79 virtual void Init(const std::shared_ptr<AbilityInfo> &abilityInfo, 80 const std::shared_ptr<OHOSApplication> &application, std::shared_ptr<AbilityHandler> &handler, 81 const sptr<IRemoteObject> &token) override; 82 virtual void OnStart(const Want &want) override; 83 virtual void OnStop() override; 84 virtual void OnActive() override; 85 virtual void OnInactive() override; 86 virtual void OnBackground() override; 87 virtual void OnForeground(const Want &want) override; 88 virtual void OnCommand(const AAFwk::Want &want, bool restart, int startId) override; 89 virtual sptr<IRemoteObject> OnConnect(const Want &want) override; 90 virtual void OnDisconnect(const Want &want) override; 91 92 bool SubscribeEvent(); 93 94 private: 95 Want want_ = {}; 96 sptr<AbilityContextConnectCallback> stub_ = {}; 97 sptr<AAFwk::AbilityConnectionProxy> connCallback_ = {}; 98 std::shared_ptr<AbilityContextAbilityEventSubscriber> subscriber_ = {}; 99 }; 100 int AbilityContextAbility::sequenceNumber_ = 0; 101 102 class AbilityContextAbilityEventSubscriber : public EventFwk::CommonEventSubscriber { 103 public: AbilityContextAbilityEventSubscriber(const EventFwk::CommonEventSubscribeInfo & sp)104 AbilityContextAbilityEventSubscriber(const EventFwk::CommonEventSubscribeInfo &sp) 105 : EventFwk::CommonEventSubscriber(sp) 106 { 107 mapTestFunc_ = { 108 {"ConnectAbility", [this]() { TestConnectAbility(); }}, 109 {"StopAbility", [this]() { TestStopAbility(); }}, 110 {"DisconnectAbility", [this]() { TestDisconnectAbility(); }}, 111 {"StartAbility", [this]() { TestStartAbility(); }}, 112 {"TerminateAbility", [this]() { TestTerminateAbility(); }}, 113 }; 114 } 115 ~AbilityContextAbilityEventSubscriber() = default; 116 virtual void OnReceiveEvent(const EventFwk::CommonEventData &data); 117 TestConnectAbility()118 void TestConnectAbility() 119 { 120 mainAbility.TestConnectAbility(); 121 } 122 TestStopAbility()123 void TestStopAbility() 124 { 125 mainAbility.TestStopAbility(); 126 } 127 TestDisconnectAbility()128 void TestDisconnectAbility() 129 { 130 mainAbility.TestDisconnectAbility(); 131 } 132 TestStartAbility()133 void TestStartAbility() 134 { 135 mainAbility.TestStartAbility(); 136 } 137 TestTerminateAbility()138 void TestTerminateAbility() 139 { 140 mainAbility.TestTerminateAbility(); 141 } 142 143 Want want = {}; 144 AbilityContextAbility mainAbility = {}; 145 std::unordered_map<std::string, std::function<void()>> mapTestFunc_ = {}; 146 }; 147 } // namespace AppExecFwk 148 } // namespace OHOS 149 #endif // ABILITY_CONTEXT_ABILITY_H_