• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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_BASE_WANT_H
17 #define OHOS_ABILITY_BASE_WANT_H
18 
19 #include <string>
20 #include <vector>
21 #include <algorithm>
22 
23 #include "uri.h"
24 #include "want_params.h"
25 #include "element_name.h"
26 #include "operation.h"
27 #include "parcel.h"
28 #include "nlohmann/json.hpp"
29 
30 using Operation = OHOS::AAFwk::Operation;
31 
32 namespace OHOS {
33 namespace AAFwk {
34 class Want final : public Parcelable {
35 public:
36     /**
37      * Indicates the grant to perform read operations on the URI.
38      */
39     static constexpr unsigned int FLAG_AUTH_READ_URI_PERMISSION = 0x00000001;
40     /**
41      * Indicates the grant to perform write operations on the URI.
42      */
43     static constexpr unsigned int FLAG_AUTH_WRITE_URI_PERMISSION = 0x00000002;
44     /**
45      * Returns the result to the source ability.
46      */
47     static constexpr unsigned int FLAG_ABILITY_FORWARD_RESULT = 0x00000004;
48     /**
49      * Determines whether an ability on the local device can be migrated to a remote device.
50      */
51     static constexpr unsigned int FLAG_ABILITY_CONTINUATION = 0x00000008;
52     /**
53      * Specifies whether a component does not belong to OHOS.
54      */
55     static constexpr unsigned int FLAG_NOT_OHOS_COMPONENT = 0x00000010;
56     /**
57      * Specifies whether an ability is started.
58      */
59     static constexpr unsigned int FLAG_ABILITY_FORM_ENABLED = 0x00000020;
60     /**
61      * Indicates the grant for possible persisting on the URI.
62      */
63     static constexpr unsigned int FLAG_AUTH_PERSISTABLE_URI_PERMISSION = 0x00000040;
64     /**
65      * Returns the result to the source ability slice.
66      */
67     static constexpr unsigned int FLAG_AUTH_PREFIX_URI_PERMISSION = 0x00000080;
68     /**
69      * Supports multi-device startup in the distributed scheduling system.
70      */
71     static constexpr unsigned int FLAG_ABILITYSLICE_MULTI_DEVICE = 0x00000100;
72     /**
73      * Indicates that an ability using the Service template is started regardless of whether the host application has
74      * been started.
75      */
76     static constexpr unsigned int FLAG_START_FOREGROUND_ABILITY = 0x00000200;
77 
78     /**
79      * Indicates the continuation is reversible.
80      */
81     static constexpr unsigned int FLAG_ABILITY_CONTINUATION_REVERSIBLE = 0x00000400;
82 
83     /**
84      * Install the specified ability if it's not installed.
85      */
86     static constexpr unsigned int FLAG_INSTALL_ON_DEMAND = 0x00000800;
87     /**
88      * Indicates the continuation is quick start
89      */
90     static constexpr unsigned int FLAG_ABILITY_PREPARE_CONTINUATION = 0x00001000;
91     /**
92      * Support collaborative request lifecycle callback in distributed scheduling systems.
93      */
94     static constexpr unsigned int FLAG_ABILITY_ON_COLLABORATE = 0x00002000;
95     /**
96      * Returns the result to the source ability slice.
97      */
98     static constexpr unsigned int FLAG_ABILITYSLICE_FORWARD_RESULT = 0x04000000;
99     /**
100      * Install the specifiedi ability with background mode if it's not installed.
101      */
102     static constexpr unsigned int FLAG_INSTALL_WITH_BACKGROUND_MODE = 0x80000000;
103     /**
104      * Indicates the operation of clearing other missions.
105      */
106     static constexpr unsigned int FLAG_ABILITY_CLEAR_MISSION = 0x00008000;
107     /**
108      * Indicates the operation of creating a task on the historical mission stack.
109      */
110     static constexpr unsigned int FLAG_ABILITY_NEW_MISSION = 0x10000000;
111     /**
112      * Indicates that the existing instance of the ability to start will be reused if it is already at the top of
113      * the mission stack. Otherwise, a new ability instance will be created.
114      */
115     static constexpr unsigned int FLAG_ABILITY_MISSION_TOP = 0x20000000;
116     /**
117      * Indicates that if implicit start ability couldn't match any application, no tip dialog will be pulled up.
118      */
119     static constexpr unsigned int FLAG_START_WITHOUT_TIPS = 0x40000000;
120 
121     /**
122      * @description:  Default construcotr of Want class, which is used to initialzie flags and URI.
123      * @param None
124      * @return None
125      */
126     Want();
127 
128     /**
129      * @description: Default deconstructor of Want class
130      * @param None
131      * @return None
132      */
133     ~Want();
134 
135     /**
136      * @description: Copy construcotr of Want class, which is used to initialzie flags, URI, etc.
137      * @param want the source instance of Want.
138      * @return None
139      */
140     Want(const Want &want);
141     Want &operator=(const Want &want);
142 
143     /**
144      * @description: Sets a flag in a Want.
145      * @param flags Indicates the flag to set.
146      * @return Returns this Want object containing the flag.
147      */
148     Want &SetFlags(unsigned int flags);
149 
150     /**
151      * @description: Obtains the description of flags in a Want.
152      * @return Returns the flag description in the Want.
153      */
154     unsigned int GetFlags() const;
155 
156     /**
157      * @description: Adds a flag to a Want.
158      * @param flags Indicates the flag to add.
159      * @return Returns the Want object with the added flag.
160      */
161     Want &AddFlags(unsigned int flags);
162 
163     /**
164      * @description: Removes the description of a flag from a Want.
165      * @param flags Indicates the flag to remove.
166      * @return Removes the description of a flag from a Want.
167      */
168     void RemoveFlags(unsigned int flags);
169 
170     /**
171      * @description: Sets the bundleName and abilityName attributes for this Want object.
172      * @param bundleName Indicates the bundleName to set for the operation attribute in the Want.
173      * @param abilityName Indicates the abilityName to set for the operation attribute in the Want.
174      * @return Returns this Want object that contains the specified bundleName and abilityName attributes.
175      */
176     Want &SetElementName(const std::string &bundleName, const std::string &abilityName);
177 
178     /**
179      * @description: Sets the bundleName and abilityName attributes for this Want object.
180      * @param deviceId Indicates the deviceId to set for the operation attribute in the Want.
181      * @param bundleName Indicates the bundleName to set for the operation attribute in the Want.
182      * @param abilityName Indicates the abilityName to set for the operation attribute in the Want.
183      * @return Returns this Want object that contains the specified bundleName and abilityName attributes.
184      */
185     Want &SetElementName(const std::string &deviceId, const std::string &bundleName,
186         const std::string &abilityName, const std::string &moduleName = "");
187 
188     /**
189      * @description: Sets an ElementName object in a Want.
190      * @param element Indicates the ElementName description.
191      * @return Returns this Want object containing the ElementName
192      */
193     Want &SetElement(const OHOS::AppExecFwk::ElementName &element);
194 
195     /**
196      * @description: Obtains the description of the ElementName object in a Want.
197      * @return Returns the ElementName description in the Want.
198      */
199     OHOS::AppExecFwk::ElementName GetElement() const;
200 
201     /**
202      * @description: Creates a want with its corresponding attributes specified for starting the main ability of an
203      * application.
204      * @param ElementName  Indicates the ElementName object defining the deviceId, bundleName,
205      * and abilityName sub-attributes of the operation attribute in a want.
206      * @return Returns the want object used to start the main ability of an application.
207      */
208     static Want *MakeMainAbility(const OHOS::AppExecFwk::ElementName &elementName);
209 
210     /**
211      * @description: Creates a Want instance by using a given Uniform Resource Identifier (URI).
212      * This method parses the input URI and saves it in a Want object.
213      * @param uri Indicates the URI to parse.
214      * @return Returns a Want object containing the URI.
215      */
216     static Want *WantParseUri(const char *uri);
217 
218     /**
219      * @description: Creates a Want instance by using a given Uniform Resource Identifier (URI).
220      * This method parses the input URI and saves it in a Want object.
221      * @param uri Indicates the URI to parse.
222      * @return Returns a Want object containing the URI.
223      */
224     static Want *ParseUri(const std::string &uri);
225 
226     /**
227      * @description: Obtains the description of a URI in a Want.
228      * @return Returns the URI description in the Want.
229      */
230     Uri GetUri() const;
231 
232     /**
233      * @description: Obtains the string representation of the URI in this Want.
234      * @return Returns the string of the URI.
235      */
236     std::string GetUriString() const;
237 
238     /**
239      * @description: Sets the description of a URI in a Want.
240      * @param uri Indicates the URI description.
241      * @return Returns this Want object containing the URI.
242      */
243     Want &SetUri(const std::string &uri);
244 
245     /**
246      * @description: Sets the description of a URI in a Want.
247      * @param uri Indicates the URI description.
248      * @return Returns this Want object containing the URI.
249      */
250     Want &SetUri(const Uri &uri);
251 
252     /**
253      * @description: Sets the description of a URI and a type in this Want.
254      * @param uri Indicates the URI description.
255      * @param type Indicates the type description.
256      * @return Returns the Want object containing the URI and the type by setting.
257      */
258     Want &SetUriAndType(const Uri &uri, const std::string &type);
259 
260     /**
261      * @description: Converts a Want into a URI string containing a representation of it.
262      * @param want Indicates the want description.--Want.
263      * @return   Returns an encoding URI string describing the Want object.
264      */
265     std::string WantToUri(Want &want);
266 
267     /**
268      * @description: Converts parameter information in a Want into a URI string.
269      * @return Returns the URI string.
270      */
271     std::string ToUri() const;
272 
273     /**
274      * @description: Formats a specified URI.
275      * This method uses the Uri.getLowerCaseScheme() method to format a URI and then saves
276      * the formatted URI to this Want object.
277      * @param uri Indicates the string of URI to format.
278      * @return Returns this Want object that contains the formatted uri attribute.
279      */
280     Want &FormatUri(const std::string &uri);
281 
282     /**
283      * @description: Formats a specified URI.
284      * This method uses the Uri.getLowerCaseScheme() method to format a URI and then saves
285      * the formatted URI to this Want object.
286      * @param uri Indicates the URI to format.
287      * @return Returns this Want object that contains the formatted URI attribute.
288      */
289     Want &FormatUri(const Uri &uri);
290 
291     /**
292      * @description: Obtains the description of an action in a want.
293      * @return Returns a Want object that contains the action description.
294      */
295     std::string GetAction() const;
296 
297     /**
298      * @description: Sets the description of an action in a want.
299      * @param action Indicates the action description to set.
300      * @return Returns a Want object that contains the action description.
301      */
302     Want &SetAction(const std::string &action);
303 
304     /**
305      * @description: Obtains the name of the specified bundle in a Want.
306      * @return Returns the specified bundle name in the Want.
307      */
308     std::string GetBundle() const;
309 
310     /**
311      * @description: Sets a bundle name in this Want.
312      * If a bundle name is specified in a Want, the Want will match only
313      * the abilities in the specified bundle. You cannot use this method and
314      * setPicker(ohos.aafwk.content.Want) on the same Want.
315      * @param bundleName Indicates the bundle name to set.
316      * @return Returns a Want object containing the specified bundle name.
317      */
318     Want &SetBundle(const std::string &bundleName);
319 
320     /**
321      * @description: Obtains the description of all entities in a Want
322      * @return Returns a set of entities
323      */
324     const std::vector<std::string> &GetEntities() const;
325 
326     /**
327      * @description: Adds the description of an entity to a Want
328      * @param entity Indicates the entity description to add
329      * @return {Want} Returns this Want object containing the entity.
330      */
331     Want &AddEntity(const std::string &entity);
332 
333     /**
334      * @description: Removes the description of an entity from a Want
335      * @param entity Indicates the entity description to remove.
336      * @return void
337      */
338     void RemoveEntity(const std::string &entity);
339 
340     /**
341      * @description: Checks whether a Want contains the given entity
342      * @param entity Indicates the entity to check
343      * @return Returns true if the given entity is contained; returns false otherwise
344      */
345     bool HasEntity(const std::string &key) const;
346 
347     /**
348      * @description: Obtains the number of entities in a Want
349      * @return Returns the entity quantity
350      */
351     int CountEntities();
352 
353     /**
354      * @description: Obtains the description of the URI scheme in this want.
355      * @return Returns the URI scheme description in this want.
356      */
357     const std::string GetScheme() const;
358 
359     /**
360      * @description: Obtains the description of the type in this Want
361      * @return Returns the type description in this Want
362      */
363     std::string GetType() const;
364 
365     /**
366      * @description: Sets the description of a type in this Want
367      * @param type Indicates the type description
368      * @return Returns this Want object containing the type
369      */
370     Want &SetType(const std::string &type);
371 
372     /**
373      * @description: Formats a specified MIME type. This method uses
374      * the formatMimeType(java.lang.String) method to format a MIME type
375      * and then saves the formatted type to this Want object.
376      * @param type Indicates the MIME type to format
377      * @return Returns this Want object that contains the formatted type attribute
378      */
379     Want &FormatType(const std::string &type);
380 
381     /**
382      * @description: Formats a specified URI and MIME type.
383      * This method works in the same way as formatUri(ohos.utils.net.URI)
384      * and formatType(java.lang.String).
385      * @param uri Indicates the URI to format.
386      * @param type Indicates the MIME type to format.
387      * @return Returns this Want object that contains the formatted URI and type attributes.
388      */
389     Want &FormatUriAndType(const Uri &uri, const std::string &type);
390 
391     /**
392      * @description: This method formats data of a specified MIME type
393      * by removing spaces from the data and converting the data into
394      * lowercase letters. You can use this method to normalize
395      * the external data used to create Want information.
396      * @param type Indicates the MIME type to format
397      * @return Returns this Want object that contains the formatted type attribute
398      */
399     static std::string FormatMimeType(const std::string &mimeType);
400 
401     /**
402      * @description: clear the specific want object.
403      * @param want Indicates the want to clear
404      */
405     static void ClearWant(Want *want);
406 
407     /**
408      * @description: Obtains the description of the WantParams object in a Want
409      * @return Returns the WantParams description in the Want
410      */
411     const WantParams &GetParams() const;
412 
413     /**
414      * @description: Sets a wantParams object in a want.
415      * @param wantParams  Indicates the wantParams description.
416      * @return Returns this want object containing the wantParams.
417      */
418     Want &SetParams(const WantParams &wantParams);
419 
420     /**
421      * @description: Obtains a bool-type value matching the given key.
422      * @param key   Indicates the key of WantParams.
423      * @param defaultValue  Indicates the default bool-type value.
424      * @return Returns the bool-type value of the parameter matching the given key;
425      * returns the default value if the key does not exist.
426      */
427     bool GetBoolParam(const std::string &key, bool defaultValue) const;
428 
429     /**
430      * @description: Obtains a bool-type array matching the given key.
431      * @param key   Indicates the key of WantParams.
432      * @return Returns the bool-type array of the parameter matching the given key;
433      * returns null if the key does not exist.
434      */
435     std::vector<bool> GetBoolArrayParam(const std::string &key) const;
436 
437     /**
438      * @description: Sets a parameter value of the IRemoteObject type.
439      * @param key   Indicates the key matching the parameter.
440      * @param value Indicates the IRemoteObject value of the parameter.
441      * @return Returns this want object containing the parameter value.
442      */
443     Want& SetParam(const std::string& key, const sptr<IRemoteObject>& remoteObject);
444 
445     /**
446      * @description: Obtains a IRemoteObject-type value matching the given key.
447      * @param key   Indicates the key of WantParams.
448      * @param defaultValue  Indicates the default IRemoteObject-type value.
449      * @return Returns the IRemoteObject-type value of the parameter matching the given key;
450      * returns the nullptr if the key does not exist.
451      */
452     sptr<IRemoteObject> GetRemoteObject(const std::string &key) const;
453 
454     /**
455      * @description: Sets a parameter value of the boolean type.
456      * @param key   Indicates the key matching the parameter.
457      * @param value Indicates the boolean value of the parameter.
458      * @return Returns this want object containing the parameter value.
459      */
460     Want &SetParam(const std::string &key, bool value);
461 
462     /**
463      * @description: Sets a parameter value of the boolean array type.
464      * @param key   Indicates the key matching the parameter.
465      * @param value Indicates the boolean array of the parameter.
466      * @return Returns this want object containing the parameter value.
467      */
468     Want &SetParam(const std::string &key, const std::vector<bool> &value);
469 
470     /**
471      * @description: Obtains a byte-type value matching the given key.
472      * @param key   Indicates the key of WantParams.
473      * @param defaultValue  Indicates the default byte-type value.
474      * @return Returns the byte-type value of the parameter matching the given key;
475      * returns the default value if the key does not exist.
476      */
477     byte GetByteParam(const std::string &key, byte defaultValue) const;
478 
479     /**
480      * @description: Obtains a byte-type array matching the given key.
481      * @param key   Indicates the key of WantParams.
482      * @return Returns the byte-type array of the parameter matching the given key;
483      * returns null if the key does not exist.
484      */
485     std::vector<byte> GetByteArrayParam(const std::string &key) const;
486 
487     /**
488      * @description: Sets a parameter value of the byte type.
489      * @param key   Indicates the key matching the parameter.
490      * @param value Indicates the byte-type value of the parameter.
491      * @return Returns this Want object containing the parameter value.
492      */
493     Want &SetParam(const std::string &key, byte value);
494 
495     /**
496      * @description: Sets a parameter value of the byte array type.
497      * @param key   Indicates the key matching the parameter.
498      * @param value Indicates the byte array of the parameter.
499      * @return Returns this Want object containing the parameter value.
500      */
501     Want &SetParam(const std::string &key, const std::vector<byte> &value);
502 
503     /**
504      * @description: Obtains a char value matching the given key.
505      * @param key   Indicates the key of wnatParams.
506      * @param value Indicates the default char value.
507      * @return Returns the char value of the parameter matching the given key;
508      * returns the default value if the key does not exist.
509      */
510     zchar GetCharParam(const std::string &key, zchar defaultValue) const;
511 
512     /**
513      * @description: Obtains a char array matching the given key.
514      * @param key   Indicates the key of wantParams.
515      * @return Returns the char array of the parameter matching the given key;
516      * returns null if the key does not exist.
517      */
518     std::vector<zchar> GetCharArrayParam(const std::string &key) const;
519 
520     /**
521      * @description: Sets a parameter value of the char type.
522      * @param key   Indicates the key of wantParams.
523      * @param value Indicates the char value of the parameter.
524      * @return Returns this want object containing the parameter value.
525      */
526     Want &SetParam(const std::string &key, zchar value);
527 
528     /**
529      * @description: Sets a parameter value of the char array type.
530      * @param key   Indicates the key of wantParams.
531      * @param value Indicates the char array of the parameter.
532      * @return Returns this want object containing the parameter value.
533      */
534     Want &SetParam(const std::string &key, const std::vector<zchar> &value);
535 
536     /**
537      * @description: Obtains an int value matching the given key.
538      * @param key   Indicates the key of wantParams.
539      * @param value Indicates the default int value.
540      * @return Returns the int value of the parameter matching the given key;
541      * returns the default value if the key does not exist.
542      */
543     int GetIntParam(const std::string &key, int defaultValue) const;
544 
545     /**
546      * @description: Obtains an int array matching the given key.
547      * @param key   Indicates the key of wantParams.
548      * @return Returns the int array of the parameter matching the given key;
549      * returns null if the key does not exist.
550      */
551     std::vector<int> GetIntArrayParam(const std::string &key) const;
552 
553     /**
554      * @description: Sets a parameter value of the int type.
555      * @param key   Indicates the key matching the parameter.
556      * @param value Indicates the int value of the parameter.
557      * @return Returns this Want object containing the parameter value.
558      */
559     Want &SetParam(const std::string &key, int value);
560 
561     /**
562      * @description: Sets a parameter value of the int array type.
563      * @param key   Indicates the key matching the parameter.
564      * @param value Indicates the int array of the parameter.
565      * @return Returns this Want object containing the parameter value.
566      */
567     Want &SetParam(const std::string &key, const std::vector<int> &value);
568 
569     /**
570      * @description: Obtains a double value matching the given key.
571      * @param key   Indicates the key of wantParams.
572      * @param defaultValue  Indicates the default double value.
573      * @return Returns the double value of the parameter matching the given key;
574      * returns the default value if the key does not exist.
575      */
576     double GetDoubleParam(const std::string &key, double defaultValue) const;
577 
578     /**
579      * @description: Obtains a double array matching the given key.
580      * @param key   Indicates the key of WantParams.
581      * @return Returns the double array of the parameter matching the given key;
582      * returns null if the key does not exist.
583      */
584     std::vector<double> GetDoubleArrayParam(const std::string &key) const;
585 
586     /**
587      * @description: Sets a parameter value of the double type.
588      * @param key   Indicates the key matching the parameter.
589      * @param value Indicates the int value of the parameter.
590      * @return Returns this Want object containing the parameter value.
591      */
592     Want &SetParam(const std::string &key, double value);
593 
594     /**
595      * @description: Sets a parameter value of the double array type.
596      * @param key   Indicates the key matching the parameter.
597      * @param value Indicates the double array of the parameter.
598      * @return Returns this want object containing the parameter value.
599      */
600     Want &SetParam(const std::string &key, const std::vector<double> &value);
601 
602     /**
603      * @description: Obtains a float value matching the given key.
604      * @param key   Indicates the key of wnatParams.
605      * @param value Indicates the default float value.
606      * @return Returns the float value of the parameter matching the given key;
607      * returns the default value if the key does not exist.
608      */
609     float GetFloatParam(const std::string &key, float defaultValue) const;
610 
611     /**
612      * @description: Obtains a float array matching the given key.
613      * @param key Indicates the key of WantParams.
614      * @return Obtains a float array matching the given key.
615      */
616     std::vector<float> GetFloatArrayParam(const std::string &key) const;
617 
618     /**
619      * @description: Sets a parameter value of the float type.
620      * @param key Indicates the key matching the parameter.
621      * @param value Indicates the byte-type value of the parameter.
622      * @return Returns this Want object containing the parameter value.
623      */
624     Want &SetParam(const std::string &key, float value);
625 
626     /**
627      * @description: Sets a parameter value of the float array type.
628      * @param key Indicates the key matching the parameter.
629      * @param value Indicates the byte-type value of the parameter.
630      * @return Returns this Want object containing the parameter value.
631      */
632     Want &SetParam(const std::string &key, const std::vector<float> &value);
633 
634     /**
635      * @description: Obtains a long value matching the given key.
636      * @param key Indicates the key of wantParams.
637      * @param value Indicates the default long value.
638      * @return Returns the long value of the parameter matching the given key;
639      * returns the default value if the key does not exist.
640      */
641     long GetLongParam(const std::string &key, long defaultValue) const;
642 
643     /**
644      * @description: Obtains a long array matching the given key.
645      * @param key Indicates the key of wantParams.
646      * @return Returns the long array of the parameter matching the given key;
647      * returns null if the key does not exist.
648      */
649     std::vector<long> GetLongArrayParam(const std::string &key) const;
650 
651     Want &SetParam(const std::string &key, long long value);
652 
653     /**
654      * @description: Sets a parameter value of the long type.
655      * @param key Indicates the key matching the parameter.
656      * @param value Indicates the byte-type value of the parameter.
657      * @return Returns this Want object containing the parameter value.
658      */
659     Want &SetParam(const std::string &key, long value);
660 
661     /**
662      * @description: Sets a parameter value of the long array type.
663      * @param key Indicates the key matching the parameter.
664      * @param value Indicates the byte-type value of the parameter.
665      * @return Returns this Want object containing the parameter value.
666      */
667     Want &SetParam(const std::string &key, const std::vector<long> &value);
668 
669     /**
670      * @description: a short value matching the given key.
671      * @param key Indicates the key of wantParams.
672      * @param defaultValue Indicates the default short value.
673      * @return Returns the short value of the parameter matching the given key;
674      * returns the default value if the key does not exist.
675      */
676     short GetShortParam(const std::string &key, short defaultValue) const;
677 
678     /**
679      * @description: Obtains a short array matching the given key.
680      * @param key Indicates the key of wantParams.
681      * @return Returns the short array of the parameter matching the given key;
682      * returns null if the key does not exist.
683      */
684     std::vector<short> GetShortArrayParam(const std::string &key) const;
685 
686     /**
687      * @description: Sets a parameter value of the short type.
688      * @param key Indicates the key matching the parameter.
689      * @param value Indicates the byte-type value of the parameter.
690      * @return Returns this Want object containing the parameter value.
691      */
692     Want &SetParam(const std::string &key, short value);
693 
694     /**
695      * @description: Sets a parameter value of the short array type.
696      * @param key Indicates the key matching the parameter.
697      * @param value Indicates the byte-type value of the parameter.
698      * @return Returns this Want object containing the parameter value.
699      */
700     Want &SetParam(const std::string &key, const std::vector<short> &value);
701 
702     /**
703      * @description: Obtains a string value matching the given key.
704      * @param key Indicates the key of wantParams.
705      * @return Returns the string value of the parameter matching the given key;
706      * returns null if the key does not exist.
707      */
708     std::string GetStringParam(const std::string &key) const;
709 
710     /**
711      * @description: Obtains a string array matching the given key.
712      * @param key Indicates the key of wantParams.
713      * @return Returns the string array of the parameter matching the given key;
714      * returns null if the key does not exist.
715      */
716     std::vector<std::string> GetStringArrayParam(const std::string &key) const;
717 
718     /**
719      * @description: Sets a parameter value of the string type.
720      * @param key Indicates the key matching the parameter.
721      * @param value Indicates the byte-type value of the parameter.
722      * @return Returns this Want object containing the parameter value.
723      */
724     Want &SetParam(const std::string &key, const std::string &value);
725 
726     /**
727      * @description: Sets a parameter value of the string array type.
728      * @param key Indicates the key matching the parameter.
729      * @param value Indicates the byte-type value of the parameter.
730      * @return Returns this Want object containing the parameter value.
731      */
732     Want &SetParam(const std::string &key, const std::vector<std::string> &value);
733 
734     /**
735      * @description: Checks whether a Want contains the parameter matching a given key.
736      * @param key Indicates the key.
737      * @return Returns true if the Want contains the parameter; returns false otherwise.
738      */
739     bool HasParameter(const std::string &key) const;
740 
741     /**
742      * @description: Replaces parameters in this Want object with those in the given WantParams object.
743      * @param wantParams Indicates the WantParams object containing the new parameters.
744      * @return Returns this Want object containing the new parameters.
745      */
746     Want *ReplaceParams(WantParams &wantParams);
747 
748     /**
749      * @description: Replaces parameters in this Want object with those in the given Want object.
750      * @param want Indicates the Want object containing the new parameters.
751      * @return Returns this Want object containing the new parameters.
752      */
753     Want *ReplaceParams(Want &want);
754 
755     /**
756      * @description: Removes the parameter matching the given key.
757      * @param key Indicates the key matching the parameter to be removed.
758      */
759     void RemoveParam(const std::string &key);
760 
761     /**
762      * @description: Gets the description of an operation in a Want.
763      * @return Returns the operation included in this Want.
764      */
765     Operation GetOperation() const;
766 
767     /**
768      * @description: Sets the description of an operation in a Want.
769      * @param operation Indicates the operation description.
770      */
771     void SetOperation(const OHOS::AAFwk::Operation &operation);
772 
773     /**
774      * @description: Sets the description of an operation in a Want.
775      * @param want Indicates the Want object to compare.
776      * @return Returns true if the operation components of the two objects are equal; returns false otherwise.
777      */
778     bool OperationEquals(const Want &want);
779 
780     bool IsEquals(const Want &want);
781 
782     /**
783      * @description: Creates a Want object that contains only the operation component of this Want.
784      * @return Returns the created Want object.
785      */
786     Want *CloneOperation();
787 
788     /**
789      * @description: Marshals a Want into a Parcel.
790      * Fields in the Want are marshalled separately. If any field fails to be marshalled, false is returned.
791      * @param parcel Indicates the Parcel object for marshalling.
792      * @return Returns true if the marshalling is successful; returns false otherwise.
793      */
794     virtual bool Marshalling(Parcel &parcel) const;
795 
796     /**
797      * @description: Unmarshals a Want from a Parcel.
798      * Fields in the Want are unmarshalled separately. If any field fails to be unmarshalled, false is returned.
799      * @param parcel Indicates the Parcel object for unmarshalling.
800      * @return Returns true if the unmarshalling is successful; returns false otherwise.
801      */
802     static Want *Unmarshalling(Parcel &parcel);
803 
804     void DumpInfo(int level) const;
805 
806     std::string ToString() const;
807 
808     static Want *FromString(std::string &string);
809 
810     /**
811     * @description: Sets a device id in a Want.
812     * @param deviceId Indicates the device id to set.
813     * @return Returns this Want object containing the flag.
814     */
815     Want &SetDeviceId(const std::string &deviceId);
816 
817     std::string GetDeviceId() const;
818 
819     /**
820      * @description: Sets an ModuleName object in a Want.
821      * @param moduleName Indicates the ModuleName description.
822      * @return Returns this Want object containing the ModuleName.
823      */
824     Want &SetModuleName(const std::string &moduleName);
825 
826     /**
827      * @description: Obtains the description of the ModuleName object in a Want.
828      * @return Returns the ModuleName description in the Want.
829      */
830     std::string GetModuleName() const;
831 
832     void CloseAllFd();
833 
834     void RemoveAllFd();
835 
836     void DupAllFd();
837 
838     void SetEntities(const std::vector<std::string> &entities);
839     static int32_t Flags_ConvertEts2Native(const int32_t index);
840     static int32_t Flags_ConvertNative2Ets(const int32_t nativeValue);
841     static std::string Action_ConvertEts2Native(const int32_t index);
842     static int32_t Action_ConvertNative2Ets(const std::string nativeValue);
843 
844 public:
845     // action definition
846     static const std::string ACTION_PLAY;
847     static const std::string ACTION_HOME;
848 
849     // entity definition
850     static const std::string ENTITY_HOME;
851     static const std::string ENTITY_VIDEO;
852     static const std::string FLAG_HOME_INTENT_FROM_SYSTEM;
853     static const std::string ENTITY_MUSIC;
854     static const std::string ENTITY_EMAIL;
855     static const std::string ENTITY_CONTACTS;
856     static const std::string ENTITY_MAPS;
857     static const std::string ENTITY_BROWSER;
858     static const std::string ENTITY_CALENDAR;
859     static const std::string ENTITY_MESSAGING;
860     static const std::string ENTITY_FILES;
861     static const std::string ENTITY_GALLERY;
862 
863     static constexpr int HEX_STRING_BUF_LEN = 36;
864     static constexpr int HEX_STRING_LEN = 10;
865 
866     // reserved param definition
867     static const std::string PARAM_RESV_WINDOW_MODE;
868     static const std::string PARAM_RESV_DISPLAY_ID;
869     static const std::string PARAM_RESV_WITH_ANIMATION;
870     static const std::string PARAM_RESV_WINDOW_FOCUSED;
871     static const std::string PARAM_RESV_WINDOW_LEFT;
872     static const std::string PARAM_RESV_WINDOW_TOP;
873     static const std::string PARAM_RESV_WINDOW_WIDTH;
874     static const std::string PARAM_RESV_WINDOW_HEIGHT;
875     static const std::string PARAM_RESV_MIN_WINDOW_WIDTH;
876     static const std::string PARAM_RESV_MIN_WINDOW_HEIGHT;
877     static const std::string PARAM_RESV_MAX_WINDOW_WIDTH;
878     static const std::string PARAM_RESV_MAX_WINDOW_HEIGHT;
879     static const std::string PARAM_RESV_CALLER_TOKEN;
880     static const std::string PARAM_RESV_CALLER_BUNDLE_NAME;
881     static const std::string PARAM_RESV_CALLER_ABILITY_NAME;
882     static const std::string PARAM_RESV_CALLER_NATIVE_NAME;
883     static const std::string PARAM_RESV_CALLER_APP_ID;
884     static const std::string PARAM_RESV_CALLER_APP_IDENTIFIER;
885     static const std::string PARAM_RESV_CALLER_UID;
886     static const std::string PARAM_RESV_CALLER_PID;
887     static const std::string PARAM_RESV_CALLER_APP_CLONE_INDEX;
888     static const std::string PARAM_RESV_FOR_RESULT;
889     static const std::string PARAM_RESV_CALL_TO_FOREGROUND;
890     static const std::string PARAM_RESV_START_RECENT;
891     static const std::string PARAM_RESV_REQUEST_PROC_CODE;
892     static const std::string PARAM_RESV_REQUEST_TOKEN_CODE;
893     static const std::string PARAM_RESV_ABILITY_INFO_CALLBACK;
894     static const std::string PARAM_RESV_START_TIME;
895     static const std::string PARAM_ABILITY_ACQUIRE_SHARE_DATA;
896     static const std::string PARAM_ABILITY_RECOVERY_RESTART;
897     static const std::string PARAM_ABILITY_URITYPES;
898     static const std::string PARAM_ABILITY_APPINFOS;
899     static const std::string PARAM_ASSERT_FAULT_SESSION_ID;
900     // module name string
901     static const std::string PARAM_MODULE_NAME;
902 
903     // parameter key
904     static const std::string PARAM_BACK_TO_OTHER_MISSION_STACK;
905     static const std::string PARM_LAUNCH_REASON_MESSAGE;
906 
907     // application auto startup launch reason
908     static const std::string PARAM_APP_AUTO_STARTUP_LAUNCH_REASON;
909 
910     // app clone index
911     static const std::string PARAM_APP_CLONE_INDEX_KEY;
912     static const std::string APP_INSTANCE_KEY;
913     static const std::string CREATE_APP_INSTANCE_KEY;
914 
915     static const std::string PARAM_ATOMIC_SERVICE_PAGE_PATH;
916     static const std::string PARAM_ATOMIC_SERVICE_ROUTER_NAME;
917     static const std::string PARAM_ATOMIC_SERVICE_PAGE_SOURCE_FILE;
918     static const std::string PARAM_ATOMIC_SERVICE_BUILD_FUNCTION;
919     static const std::string PARAM_ATOMIC_SERVICE_SUB_PACKAGE_NAME;
920 
921     // keep-alive
922     static const std::string PARAM_APP_KEEP_ALIVE_ENABLED;
923 
924     static const std::string PARAMS_REAL_CALLER_KEY;
925     static const std::string DESTINATION_PLUGIN_ABILITY;
926     static const std::string START_ABILITY_WITH_WAIT_OBSERVER_ID_KEY;
927     static const std::string ATOMIC_SERVICE_SHARE_ROUTER;
928     // unified data key
929     static const std::string PARAM_ABILITY_UNIFIED_DATA_KEY;
930 
931 private:
932     WantParams parameters_;
933     Operation operation_;
934 
935     static const std::string OCT_EQUALSTO;
936     static const std::string OCT_SEMICOLON;
937     static const std::string MIME_TYPE;
938     static const std::string WANT_HEADER;
939     static const std::string WANT_END;
940 
941     // no object in parcel
942     static constexpr int VALUE_NULL = -1;
943     // object exist in parcel
944     static constexpr int VALUE_OBJECT = 1;
945 
946 private:
947     static bool ParseFlag(const std::string &content, Want &want);
948     static std::string Decode(const std::string &str);
949     static std::string Encode(const std::string &str);
950     static bool ParseContent(const std::string &content, std::string &prop, std::string &value);
951     static bool ParseUriInternal(const std::string &content, OHOS::AppExecFwk::ElementName &element, Want &want);
952     static bool CheckUri(const std::string &uri);
953     bool ReadFromParcel(Parcel &parcel);
954     static bool CheckAndSetParameters(Want &want, const std::string &key, std::string &prop, const std::string &value);
955     Uri GetLowerCaseScheme(const Uri &uri);
956     void ToUriStringInner(std::string &uriString) const;
957     nlohmann::json ToJson() const;
958     bool ReadFromJson(nlohmann::json &wantJson);
959     void UriStringAppendParam(std::string &uriString) const;
960     bool WriteUri(Parcel &parcel) const;
961     bool WriteEntities(Parcel &parcel) const;
962     bool WriteElement(Parcel &parcel) const;
963     bool WriteParameters(Parcel &parcel) const;
964     bool ReadUri(Parcel &parcel);
965     bool ReadEntities(Parcel &parcel);
966     bool ReadElement(Parcel &parcel);
967     bool ReadParameters(Parcel &parcel);
968     /*  enum Flags {
969             FLAG_AUTH_READ_URI_PERMISSION = 0x00000001,
970             FLAG_AUTH_WRITE_URI_PERMISSION = 0x00000002,
971             FLAG_AUTH_PERSISTABLE_URI_PERMISSION = 0x00000040,
972             FLAG_INSTALL_ON_DEMAND = 0x00000800,
973             FLAG_START_WITHOUT_TIPS = 0x40000000
974        }
975     */
976     static constexpr std::array<int, 5> FlagsArray_ = {0x00000001, 0x00000002, 0x00000040, 0x00000800, 0x40000000};
977     /*  enum Action {
978             ACTION_HOME = 'ohos.want.action.home',
979             ACTION_DIAL = 'ohos.want.action.dial',
980             ACTION_SEARCH = 'ohos.want.action.search',
981             ACTION_WIRELESS_SETTINGS = 'ohos.settings.wireless',
982             ACTION_MANAGE_APPLICATIONS_SETTINGS = 'ohos.settings.manage.applications',
983             ACTION_APPLICATION_DETAILS_SETTINGS = 'ohos.settings.application.details',
984             ACTION_SET_ALARM = 'ohos.want.action.setAlarm',
985             ACTION_SHOW_ALARMS = 'ohos.want.action.showAlarms',
986             ACTION_SNOOZE_ALARM = 'ohos.want.action.snoozeAlarm',
987             ACTION_DISMISS_ALARM = 'ohos.want.action.dismissAlarm',
988             ACTION_DISMISS_TIMER = 'ohos.want.action.dismissTimer',
989             ACTION_SEND_SMS = 'ohos.want.action.sendSms',
990             ACTION_CHOOSE = 'ohos.want.action.choose',
991             ACTION_IMAGE_CAPTURE = 'ohos.want.action.imageCapture',
992             ACTION_VIDEO_CAPTURE = 'ohos.want.action.videoCapture',
993             ACTION_SELECT = 'ohos.want.action.select',
994             ACTION_SEND_DATA = 'ohos.want.action.sendData',
995             ACTION_SEND_MULTIPLE_DATA = 'ohos.want.action.sendMultipleData',
996             ACTION_SCAN_MEDIA_FILE = 'ohos.want.action.scanMediaFile',
997             ACTION_VIEW_DATA = 'ohos.want.action.viewData',
998             ACTION_EDIT_DATA = 'ohos.want.action.editData',
999             INTENT_PARAMS_INTENT = 'ability.want.params.INTENT',
1000             INTENT_PARAMS_TITLE = 'ability.want.params.TITLE',
1001             ACTION_FILE_SELECT = 'ohos.action.fileSelect',
1002             PARAMS_STREAM = 'ability.params.stream',
1003             ACTION_APP_ACCOUNT_OAUTH = 'ohos.account.appAccount.action.oauth'
1004         }
1005     */
1006     static constexpr std::array<const char *, 26> ActionArray_ = {
1007         "ohos.want.action.home",
1008         "ohos.want.action.dial",
1009         "ohos.want.action.search",
1010         "ohos.settings.wireless",
1011         "ohos.settings.manage.applications",
1012         "ohos.settings.application.details",
1013         "ohos.want.action.setAlarm",
1014         "ohos.want.action.showAlarms",
1015         "ohos.want.action.snoozeAlarm",
1016         "ohos.want.action.dismissAlarm",
1017         "ohos.want.action.dismissTimer",
1018         "ohos.want.action.sendSms",
1019         "ohos.want.action.choose",
1020         "ohos.want.action.imageCapture",
1021         "ohos.want.action.videoCapture",
1022         "ohos.want.action.select",
1023         "ohos.want.action.sendData",
1024         "ohos.want.action.sendMultipleData",
1025         "ohos.want.action.scanMediaFile",
1026         "ohos.want.action.viewData",
1027         "ohos.want.action.editData",
1028         "ability.want.params.INTENT",
1029         "ability.want.params.TITLE",
1030         "ohos.action.fileSelect",
1031         "ability.params.stream",
1032         "ohos.account.appAccount.action.oauth"
1033     };
1034 };
1035 }  // namespace AAFwk
1036 }  // namespace OHOS
1037 
1038 #endif  // OHOS_ABILITY_BASE_WANT_H
1039