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