1 /* 2 * Copyright (c) 2023-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 UNIFIED_META_H 17 #define UNIFIED_META_H 18 19 #include <array> 20 #include <cstdint> 21 #include <map> 22 #include <memory> 23 #include <string> 24 #include <unordered_map> 25 #include <variant> 26 #include <vector> 27 #include "visibility.h" 28 #include "pixel_map.h" 29 #include "string_ex.h" 30 #include "want.h" 31 32 namespace OHOS { 33 namespace UDMF { 34 constexpr const char* UNIFORM_DATA_TYPE = "uniformDataType"; 35 constexpr const char* CONTENT = "textContent"; 36 constexpr const char* ABSTRACT = "abstract"; 37 constexpr const char* URL = "url"; 38 constexpr const char* DESCRIPTION = "description"; 39 constexpr const char* HTML_CONTENT = "htmlContent"; 40 constexpr const char* PLAIN_CONTENT = "plainContent"; 41 constexpr const char* APP_ID = "appId"; 42 constexpr const char* APP_NAME = "appName"; 43 constexpr const char* APP_ICON_ID = "appIconId"; 44 constexpr const char* APP_LABEL_ID = "appLabelId"; 45 constexpr const char* BUNDLE_NAME = "bundleName"; 46 constexpr const char* ABILITY_NAME = "abilityName"; 47 constexpr const char* FILE_URI_PARAM = "oriUri"; 48 constexpr const char* FILE_TYPE = "fileType"; 49 constexpr const char* PIXEL_MAP = "pixelMap"; 50 constexpr const char* ARRAY_BUFFER = "arrayBuffer"; 51 constexpr const char* ARRAY_BUFFER_LENGTH = "arrayBufferLen"; 52 constexpr static const char *FORMID = "formId"; 53 constexpr static const char *FORMNAME = "formName"; 54 constexpr static const char *MODULE = "module"; 55 constexpr static const char *BUNDLENAME = "bundleName"; 56 constexpr static const char *ABILITYNAME = "abilityName"; 57 constexpr static const char *ORI_URI = "oriUri"; 58 constexpr static const char *REMOTE_URI = "remoteUri"; 59 constexpr static const char *APPLICATION_DEFINED_TYPE = "applicationDefinedType"; 60 constexpr static const char *RAW_DATA = "rawData"; 61 62 enum UDType : int32_t { 63 ENTITY = 0, 64 OBJECT, 65 COMPOSITE_OBJECT, 66 TEXT, 67 PLAIN_TEXT, 68 HTML, 69 HYPERLINK, 70 XML, 71 SOURCE_CODE, 72 SCRIPT, 73 SHELL_SCRIPT, 74 CSH_SCRIPT, 75 PERL_SCRIPT, 76 PHP_SCRIPT, 77 PYTHON_SCRIPT, 78 RUBY_SCRIPT, 79 TYPE_SCRIPT, 80 JAVA_SCRIPT, 81 C_HEADER, 82 C_SOURCE, 83 C_PLUS_PLUS_HEADER, 84 C_PLUS_PLUS_SOURCE, 85 JAVA_SOURCE, 86 EBOOK, 87 EPUB, 88 AZW, 89 AZW3, 90 KFX, 91 MOBI, 92 MEDIA, 93 IMAGE, 94 JPEG, 95 PNG, 96 RAW_IMAGE, 97 TIFF, 98 BMP, 99 ICO, 100 PHOTOSHOP_IMAGE, 101 AI_IMAGE, 102 WORD_DOC, 103 EXCEL, 104 PPT, 105 PDF, 106 POSTSCRIPT, 107 ENCAPSULATED_POSTSCRIPT, 108 VIDEO, 109 AVI, 110 MPEG, 111 MPEG4, 112 VIDEO_3GPP, 113 VIDEO_3GPP2, 114 WINDOWS_MEDIA_WM, 115 WINDOWS_MEDIA_WMV, 116 WINDOWS_MEDIA_WMP, 117 AUDIO, 118 AAC, 119 AIFF, 120 ALAC, 121 FLAC, 122 MP3, 123 OGG, 124 PCM, 125 WINDOWS_MEDIA_WMA, 126 WAVEFORM_AUDIO, 127 WINDOWS_MEDIA_WMX, 128 WINDOWS_MEDIA_WVX, 129 WINDOWS_MEDIA_WAX, 130 FILE, 131 DIRECTORY, 132 FOLDER, 133 SYMLINK, 134 ARCHIVE, 135 BZ2_ARCHIVE, 136 DISK_IMAGE, 137 TAR_ARCHIVE, 138 ZIP_ARCHIVE, 139 JAVA_ARCHIVE, 140 GNU_TAR_ARCHIVE, 141 GNU_ZIP_ARCHIVE, 142 GNU_ZIP_TAR_ARCHIVE, 143 CALENDAR, 144 CONTACT, 145 DATABASE, 146 MESSAGE, 147 VCARD, 148 NAVIGATION, 149 LOCATION, 150 SYSTEM_DEFINED_FORM, 151 SYSTEM_DEFINED_RECORD, 152 SYSTEM_DEFINED_APP_ITEM, 153 SYSTEM_DEFINED_PIXEL_MAP, 154 OPENHARMONY_ATOMIC_SERVICE, 155 APPLICATION_DEFINED_RECORD, 156 OPENHARMONY_PACKAGE, 157 OPENHARMONY_HAP, 158 SMIL, 159 MARKDOWN, 160 FAX, 161 JFX_FAX, 162 EFX_FAX, 163 XBITMAP_IMAGE, 164 TGA_IMAGE, 165 SGI_IMAGE, 166 OPENEXR_IMAGE, 167 FLASHPIX_IMAGE, 168 REALMEDIA, 169 AU_AUDIO, 170 AIFC_AUDIO, 171 SD2_AUDIO, 172 REALAUDIO, 173 OPENXML, 174 WORDPROCESSINGML_DOCUMENT, 175 SPREADSHEETML_SHEET, 176 PRESENTATIONML_PRESENTATION, 177 OPENDOCUMENT, 178 OPENDOCUMENT_TEXT, 179 OPENDOCUMENT_SPREADSHEET, 180 OPENDOCUMENT_PRESENTATION, 181 OPENDOCUMENT_GRAPHICS, 182 OPENDOCUMENT_FORMULA, 183 STUFFIT_ARCHIVE, 184 VCS, 185 ICS, 186 EXECUTABLE, 187 PORTABLE_EXECUTABLE, 188 SUN_JAVA_CLASS, 189 FONT, 190 TRUETYPE_FONT, 191 TRUETYPE_COLLECTION_FONT, 192 OPENTYPE_FONT, 193 POSTSCRIPT_FONT, 194 POSTSCRIPT_PFB_FONT, 195 POSTSCRIPT_PFA_FONT, 196 OPENHARMONY_HDOC, 197 OPENHARMONY_HINOTE, 198 OPENHARMONY_STYLED_STRING, 199 OPENHARMONY_WANT, 200 OFD, 201 OPG, 202 TEX, 203 CSS, 204 VOB, 205 DIF_VIDEO, 206 DV_VIDEO, 207 FLC_ANIMATION, 208 MNG, 209 MPEGURL_VIDEO, 210 TS, 211 AMR, 212 AMR_WB, 213 GMS, 214 IMY, 215 KAR, 216 MPEGURL_AUDIO, 217 MPEG_4_AUDIO, 218 MIDI_AUDIO, 219 MP2, 220 MPEG_AUDIO, 221 MXMF, 222 OTA, 223 PLS, 224 RTTTL, 225 PSID, 226 ULAW_AUDIO, 227 XMF, 228 GIF, 229 DJVU_IMAGE, 230 JNG_IMAGE, 231 PCX_IMAGE, 232 PBM_IMAGE, 233 PGM_IMAGE, 234 PNM_IMAGE, 235 PPM_IMAGE, 236 RGB_IMAGE, 237 SVG_IMAGE, 238 WBMP_IMAGE, 239 XPIXMP_IMAGE, 240 XWINDOWDUMP_IMAGE, 241 HEIF, 242 HEIC, 243 VIRTUAL_CD, 244 BOO_SOURCE, 245 D_SOURCE, 246 HTML_COMPONENT, 247 PASCAL_SOURCE, 248 HASKELL_SCRIPT, 249 LITERATE_HASKELL_SCRIPT, 250 TCL_SCRIPT, 251 ASC_TEXT, 252 PORTABLE_OBJECT, 253 RICH_TEXT, 254 DELIMITED_VALUES_TEXT, 255 COMMA_SEPARATED_VALUES_TEXT, 256 DIFF, 257 SETEXT, 258 GCD, 259 TAB_SEPARATED_VALUES_TEXT, 260 P7R, 261 PEM, 262 CHESS_PGN, 263 LHA_ARCHIVE, 264 LZH_ARCHIVE, 265 LZX_ARCHIVE, 266 TAZ_ARCHIVE, 267 SHAR_ARCHIVE, 268 CPIO_ARCHIVE, 269 WEB_ARCHIVE, 270 USTAR, 271 MATHML, 272 XHTML, 273 RSS, 274 RDF, 275 IGES, 276 CAD, 277 OCTET_STREAM, 278 ISO, 279 MESH_MODEL, 280 CERTIFICATE, 281 C_OBJECT, 282 DVI, 283 CER_CERTIFICATE, 284 CRT_CERTIFICATE, 285 CRL_CERTIFICATE, 286 PRN, 287 OPENDOCUMENT_CHART, 288 OPENDOCUMENT_TEXT_MASTER, 289 OPENDOCUMENT_TEXT_WEB, 290 OPENDOCUMENT_DATABASE, 291 OPENDOCUMENT_IMAGE, 292 OPENDOCUMENT_FORMULA_TEMPLATE, 293 OPENDOCUMENT_CHART_TEMPLATE, 294 OPENDOCUMENT_PRESENTATION_TEMPLATE, 295 OPENDOCUMENT_IMAGE_TEMPLATE, 296 OPENDOCUMENT_GRAPHICS_TEMPLATE, 297 OPENDOCUMENT_SPREADSHEET_TEMPLATE, 298 OPENDOCUMENT_TEXT_TEMPLATE, 299 WORD_DOT, 300 POWERPOINT_PPS, 301 POWERPOINT_POT, 302 EXCEL_XLT, 303 VISIO_VSD, 304 DRAWINGML_VISIO, 305 DRAWINGML_TEMPLATE, 306 DRAWINGML_VISIO_MACROENABLED, 307 DRAWINGML_TEMPLATE_MACROENABLED, 308 WORDPROCESSINGML_TEMPLATE, 309 PRESENTATIONML_TEMPLATE, 310 PRESENTATIONML_SLIDESHOW, 311 SPREADSHEETML_TEMPLATE, 312 WORDPROCESSINGML_DOCUMENT_MACROENABLED, 313 WORDPROCESSINGML_TEMPLATE_MACROENABLED, 314 SPREADSHEETML_TEMPLATE_MACROENABLED, 315 SPREADSHEETML_ADDIN_MACROENABLED, 316 SPREADSHEETML_BINARY_MACROENABLED, 317 SPREADSHEETML_SHEET_MACROENABLED, 318 PRESENTATIONALML_ADDIN_MACROENABLED, 319 PRESENTATIONALML_PRESENTATION_MACROENABLED, 320 PRESENTATIONALML_SLIDESHOW_MACROENABLED, 321 PRESENTATIONALML_TEMPLATE_MACROENABLED, 322 OPENOFFICE, 323 OPENOFFICE_CALC, 324 OPENOFFICE_DRAW, 325 OPENOFFICE_WRITER_GLOBAL, 326 OPENOFFICE_IMPRESS, 327 OPENOFFICE_MATH, 328 OPENOFFICE_WRITER, 329 OPENOFFICE_CALC_TEMPLATE, 330 OPENOFFICE_DRAW_TEMPLATE, 331 OPENOFFICE_IMPRESS_TEMPLATE, 332 OPENOFFICE_WRITER_TEMPLATE, 333 STAROFFICE, 334 STAROFFICE_DRAW, 335 STAROFFICE_CALC, 336 STAROFFICE_IMPRESS, 337 STAROFFICE_WRITER, 338 STAROFFICE_CHART, 339 STAROFFICE_MAIL, 340 STAROFFICE_WRITER_GLOBAL, 341 STAROFFICE_MATH, 342 STAROFFICE_TEMPLATE, 343 TUG_BIB, 344 TUG_CLS, 345 TUG_STY, 346 TUG_TEX, 347 LATEX, 348 ADVANCED_SYSTEMS_FORMAT, 349 ADVANCED_STREAM_REDIRECTOR, 350 MATROSKA_VIDEO, 351 MATROSKA_AUDIO, 352 SGI_MOVIE, 353 APPLE_M4V, 354 WEBM, 355 QUICKTIME_MOVIE, 356 CORELDRAW_CDR, 357 CORELDRAW_CDT, 358 CORELDRAW_CPT, 359 CORELDRAW_PAT, 360 MICROSOFT_CUR, 361 SUN_RASTER, 362 GOOGLE_WEBP, 363 KOAN_AUDIO, 364 QT_MOC, 365 GHOSTSCRIPT_FONT, 366 X_PCF_FONT, 367 WINDOWS_MEDIA_WMD, 368 WINDOWS_MEDIA_WMZ, 369 WINDOWS_INSTALLER, 370 PUBLISHER_PUB, 371 WINDOWS_MEDIA_PLAYLIST, 372 ACCESS_MDB, 373 STEREOLITHOGRAPHY, 374 APPLE_MEDIA_PLAYLIST, 375 ABISOURCE_WORD, 376 ADOBE_FRAMEMAKER, 377 WOLFRAM_CDF, 378 CINDERELLA_CDY, 379 ADOBE_DCR, 380 ADOBE_DIR, 381 ADOBE_DXR, 382 GNUMERIC_SPREADSHEET, 383 HDFGROUP_HDF, 384 BINHEX_ARCHIVE, 385 MICROSOFT_HTA, 386 INTERNET_INS, 387 INTERNET_ISP, 388 TROFF, 389 ADOBE_MIF, 390 FREEMIND, 391 YAMAHA_SMAF, 392 MATHEMATICA_NOTEBOOK, 393 XIPH_OGG, 394 PROXY_AUTOCONFIG, 395 PKCS_12, 396 PGP_SIGNATURE, 397 QUICKTIME_LINK, 398 RAR_ARCHIVE, 399 SEVEN_ZIP_ARCHIVE, 400 RED_BEAN_SGF, 401 SIT_ARCHIVE, 402 FUTURESPLASH, 403 FLASH, 404 TEXINFO, 405 TORRENT, 406 DOOM, 407 APPLE_WEBARCHIVE, 408 ANDROID_WEBARCHIVE, 409 GIMP_XCF, 410 EDRWMAX, 411 EDRWMIND, 412 CNKI_CAJ, 413 DBASE_DBF, 414 AUTODESK_DWG, 415 AUTODESK_DXF, 416 AUTODESK_DWS, 417 AUTODESK_DWT, 418 AUTODESK_DWF, 419 AUTODESK_DWFX, 420 AUTODESK_SHP, 421 AUTODESK_SHX, 422 AUTODESK_SLIDE_LIB, 423 AUTODESK_LINE, 424 AUTODESK_PLOTTER, 425 HP_GRAPHICS_LANG, 426 MICROSOFT_METAFILE, 427 ACIS_SAT, 428 AVIF_IMAGE, 429 MICROSOFT_DDS, 430 IFF_ILBM, 431 CR2_RAW_IMAGE, 432 CR3_RAW_IMAGE, 433 CRW_RAW_IMAGE, 434 DNG_RAW_IMAGE, 435 ARW_RAW_IMAGE, 436 NEF_RAW_IMAGE, 437 MINDMANAGER_MMAP, 438 MICROSOFT_EMAIL, 439 MICROSOFT_MESSAGE, 440 MICROSOFT_PST, 441 KINGSOFT_OFFICE, 442 KINGSOFT_WRITER_WPS, 443 KINGSOFT_WRITER_WPT, 444 KINGSOFT_PRESENTATION_DPS, 445 KINGSOFT_PRESENTATION_TEMPLATE, 446 KINGSOFT_SPREADSHEETS_ET, 447 KINGSOFT_SPREADSHEETS_TEMPLATE, 448 MICROSOFT_INI, 449 JSON, 450 YAML, 451 LOG, 452 URI, 453 FILE_URI, 454 TEXT_LST, 455 ANDROID_APK, 456 BZ_ARCHIVE, 457 TBZ_ARCHIVE, 458 TBZ2_ARCHIVE, 459 XZ_ARCHIVE, 460 TXZ_ARCHIVE, 461 XAR_ARCHIVE, 462 CAB_ARCHIVE, 463 RPM_ARCHIVE, 464 TPZ_ARCHIVE, 465 LZA_ARCHIVE, 466 ARJ_ARCHIVE, 467 ZIPX_ARCHIVE, 468 LZMA_ARCHIVE, 469 LZMA86_ARCHIVE, 470 XPI_ARCHIVE, 471 HFS_DISK_IMAGE, 472 IMG_DISK_IMAGE, 473 ISZ_DISK_IMAGE, 474 WIM_DISK_IMAGE, 475 SWM_DISK_IMAGE, 476 KINGSOFT_SPREADSHEETS_ETX, 477 KINGSOFT_SPREADSHEETS_ETTX, 478 EXCEL_DIF, 479 OPENHARMONY_APP, 480 HMOS_WIFI, 481 TEL, 482 ETS, 483 JSON5, 484 APE_AUDIO, 485 OPUS_AUDIO, 486 CONF, 487 MICROSOFT_DOS_BATCH, 488 MICROSOFT_VBSCRIPT, 489 ION, 490 MICROSOFT_REGISTRY, 491 MICROSOFT_CATALOG, 492 MICROSOFT_POWERSHELL_SCRIPT, 493 W3_WOFF, 494 SQLITE_DATABASE, 495 MICROSOFT_SYS, 496 MICROSOFT_INF, 497 MICROSOFT_PDB, 498 MICROSOFT_TLB, 499 MICROSOFT_SCCD, 500 ADOBE_F4V, 501 MP2T, 502 YOUTUBE_VIDEO, 503 WEBEX_VIDEO, 504 MPEG2, 505 MPEG1, 506 REALMEDIA_VBR, 507 REAL_REALVIDEO, 508 DIVX_VIDEO, 509 CSIRO_ANNODEX, 510 OGV, 511 LSF_VIDEO, 512 H264_VIDEO, 513 JPEG2000, 514 RAF_RAW_IMAGE, 515 NRW_RAW_IMAGE, 516 RW2_RAW_IMAGE, 517 PEF_RAW_IMAGE, 518 SRW_RAW_IMAGE, 519 ERF_RAW_IMAGE, 520 ORF_RAW_IMAGE, 521 IEF_IMAGE, 522 ART_IMAGE, 523 CONTENT_FORM, 524 M4P_AUDIO, 525 AC3_AUDIO, 526 UD_BUTT 527 }; 528 529 struct UtdType { 530 int32_t UtdEnum; 531 const char *UtdEnumName; 532 const char *UtdId; 533 }; 534 535 namespace UtdUtils { 536 bool API_EXPORT IsValidUtdId(const std::string &utdId); 537 int32_t API_EXPORT GetUtdEnumFromUtdId(const std::string &utdId); 538 std::string API_EXPORT GetUtdIdFromUtdEnum(int32_t utdType); 539 std::vector<UtdType> API_EXPORT GetUtdTypes(); 540 } // namespace UtdUtils 541 542 /* 543 * UnifiedData variant definitions. 544 */ 545 using UDVariant = std::variant<int32_t, int64_t, bool, double, std::string, std::vector<uint8_t>>; 546 using UDDetails = std::map<std::string, UDVariant>; 547 /* 548 * UnifiedData Intention. 549 */ 550 enum Intention : int32_t { 551 UD_INTENTION_BASE = 0, 552 UD_INTENTION_DRAG, 553 UD_INTENTION_DATA_HUB, 554 UD_INTENTION_BUTT, 555 }; 556 557 static const std::unordered_map<int32_t, std::string> UD_INTENTION_MAP { 558 { UD_INTENTION_DRAG, "drag" }, 559 { UD_INTENTION_DATA_HUB, "DataHub" }, 560 }; 561 562 static const std::unordered_map<int32_t, std::string> UD_SYSTEM_INTENTION_MAP { 563 { UD_INTENTION_DRAG, "Drag" }, 564 }; 565 566 static const std::unordered_map<int32_t, std::string> JS_UD_INTENTION_NAME_MAP { 567 { UD_INTENTION_DATA_HUB, "DATA_HUB" }, 568 { UD_INTENTION_DRAG, "DRAG" }, 569 }; 570 571 enum ShareOptions : int32_t { 572 IN_APP, 573 CROSS_APP, 574 CROSS_DEVICE, 575 SHARE_OPTIONS_BUTT, 576 }; 577 578 struct AppShareOption { 579 int32_t enumNum; 580 const char *enumStr; 581 }; 582 583 namespace ShareOptionsUtil { 584 bool API_EXPORT IsValid(int32_t shareOption); 585 int32_t API_EXPORT GetEnumNum(const std::string &shareOption); 586 std::string API_EXPORT GetEnumStr(int32_t shareOption); 587 } // namespace ShareOptionsUtil 588 589 class API_EXPORT UnifiedDataUtils { 590 public: 591 static bool IsValidType(int32_t value); 592 static bool IsValidIntention(int32_t value); 593 static size_t GetVariantSize(UDVariant &variant); 594 static size_t GetDetailsSize(UDDetails &details); 595 static bool IsPersist(const Intention &intention); 596 static bool IsPersist(const std::string &intention); 597 static Intention GetIntentionByString(const std::string &intention); 598 static bool IsValidOptions(const std::string &key, std::string &intention); 599 }; 600 601 struct Object; 602 using ValueType = std::variant<std::monostate, int32_t, int64_t, double, bool, std::string, std::vector<uint8_t>, 603 std::shared_ptr<OHOS::AAFwk::Want>, std::shared_ptr<OHOS::Media::PixelMap>, std::shared_ptr<Object>, nullptr_t>; 604 605 struct API_EXPORT Object { 606 template<typename T> GetValueObject607 bool GetValue(const std::string &key, T &value) 608 { 609 auto it = value_.find(key); 610 if (it != value_.end() && std::holds_alternative<T>(it->second)) { 611 value = std::get<T>(it->second); 612 return true; 613 } 614 return false; 615 } 616 617 std::map<std::string, ValueType> value_; 618 }; 619 620 namespace ObjectUtils { 621 std::shared_ptr<Object> ConvertToObject(UDDetails &details); 622 UDDetails ConvertToUDDetails(std::shared_ptr<Object> object); 623 624 template<typename T, typename... Types> ConvertVariant(T && input,std::variant<Types...> & output)625 bool ConvertVariant(T &&input, std::variant<Types...> &output) 626 { 627 bool converted = false; 628 std::visit( 629 [&output, &converted](auto &&val) { 630 using BasicType = std::decay_t<decltype(val)>; 631 if constexpr ((std::is_same_v<BasicType, Types> || ...)) { 632 output = std::variant<Types...>(std::move(val)); 633 converted = true; 634 } 635 }, 636 input); 637 return converted; 638 } 639 } // namespace ObjectUtils 640 } // namespace UDMF 641 } // namespace OHOS 642 #endif // UNIFIED_META_H 643