1 /*
2  * Copyright (c) 2020 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_RECORD_NEW_H
17 #define OHOS_ABILITY_RECORD_NEW_H
18 
19 #include <list>
20 
21 #include "ability_connect_record.h"
22 #include "ability_state.h"
23 #include "app_record.h"
24 #include "serializer.h"
25 
26 namespace OHOS {
27 class AbilityConnectMission;
28 class AbilityMissionRecord;
29 class PageAbilityRecord {
30 public:
31     PageAbilityRecord(const AbilityInfo &abilityInfo, const Want &want);
32     ~PageAbilityRecord();
33 
34     // AbilityInfo
35     const AbilityInfo& GetAbilityInfo() const;
36     bool IsLauncherAbility() const;
37     void SetCurrentState(State state);
38     State GetCurrentState() const;
39     uint64_t GetToken() const;
40 
41     // Util
42     bool IsSamePageAbility(const PageAbilityRecord &target) const;
43     bool IsSamePageAbility(const Want &want) const;
44     bool IsSamePageAbility(const char *bundleName) const;
45     bool IsBottomPageAbility() const;
46 
47     // BundleInfo
48     const BundleInfo& GetBundleInfo() const;
49     void SetBundleInfo(const BundleInfo &bundleInfo);
50 
51     // LifeCycle
52     AbilityMsStatus StartAbility();
53     AbilityMsStatus ActiveAbility();
54     AbilityMsStatus InactiveAbility() const;
55     AbilityMsStatus ToBackgroundAbility() const;
56     AbilityMsStatus StopAbility() const;
57     AbilityMsStatus ExitApp();
58 
59     // MissionRecord
60     void SetMissionRecord(AbilityMissionRecord *missionRecord);
61     const AbilityMissionRecord *GetMissionRecord() const;
62 
63     // Getter and Setter next and prev ability
64     void SetNextPageAbility(PageAbilityRecord *next);
65     const PageAbilityRecord *GetNextPageAbility() const;
66     void SetPrevPageAbility(PageAbilityRecord *prev);
67     const PageAbilityRecord *GetPrevPageAbility() const;
68 
69     // connect service ability
70     void SetConnectMission(AbilityConnectMission *connectMission);
71     const AbilityConnectMission *GetConnectMission() const;
72     void SetServiceSid(const SvcIdentity& serviceSid);
73     const SvcIdentity GetServiceSid() const;
74     ConnectStatus GetConnectStatus() const;
75     void SetConnectStatus(ConnectStatus connectStatus);
76     void SetStartDone(bool startDone);
77     AbilityConnectRecord *GetConnectRecord(const SvcIdentity &serviceSid) const;
78     void pushConnectRecord(AbilityConnectRecord *connectRecord);
79     void RemoveConnectRecord(const SvcIdentity &serviceSid);
80     bool IsPerformStop() const;
81     AbilityConnectRecord *GetConnectRecord(const SvcIdentity &serviceSid, uint64_t abilityToken) const;
82 
83     AbilityMsStatus StartService();
84     AbilityMsStatus ConnectAbility();
85     AbilityMsStatus DisconnectAbility(const SvcIdentity &connectSid);
86     AbilityMsStatus ConnectAbilityDone();
87     AbilityMsStatus DisconnectAbilityDone();
88     AbilityMsStatus ForceStopServiceAbility();
89     AbilityMsStatus StopAbilityDone();
90     void RemoveConnectRecordByPageToken(uint64_t token);
91 
92     // Dump
93 #ifdef OHOS_DEBUG
94     AbilityMsStatus DumpAbilityRecord() const;
95 #endif
96     AbilityMsStatus DumpAbilitySlice(const Want &want) const;
97 private:
98     void Initialize();
99 
100     AbilityMissionRecord *missionRecord_ { nullptr };
101     PageAbilityRecord *nextPageAbility_ { nullptr };
102     PageAbilityRecord *prevPageAbility_ { nullptr };
103 
104     AppRecord *appRecord_ { nullptr };
105     AbilityInfo abilityInfo_ = {};
106     BundleInfo bundleInfo_ = {};
107     Want want_ = {};
108     State currentState_ = STATE_UNINITIALIZED;
109     uint64_t token_ { 0 };
110 
111     bool startDone_ = false;
112     SvcIdentity serviceSid_ = { 0, 0 };
113     ConnectStatus connectStatus_ = ConnectStatus::INIT;
114     bool forceStop_ = false;
115 
116     AbilityConnectMission *connectMission_  { nullptr };
117     std::list<AbilityConnectRecord *> connectRecords_;
118 };
119 }
120 #endif // OHOS_ABILITY_RECORD_NEW_H
121