@sapui5/sap.ushell 1.129.1 → 1.130.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +1 -1
  3. package/src/main/js/sap/ushell/AppInfoParameters.js +478 -346
  4. package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +41 -6
  5. package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +3 -3
  6. package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
  7. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +1 -1
  8. package/src/main/js/sap/ushell/NWBCInterface.js +1 -1
  9. package/src/main/js/sap/ushell/TechnicalParameters.js +1 -1
  10. package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  11. package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +1 -1
  12. package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +1 -1
  13. package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +1 -1
  14. package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +1 -1
  15. package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +1 -1
  16. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  17. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  18. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
  19. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
  20. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
  21. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  22. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +1 -1
  23. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +1 -1
  24. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
  25. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  26. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +1 -1
  27. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  28. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
  29. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  30. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  31. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
  33. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
  34. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +1 -1
  35. package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +7 -3
  36. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
  41. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
  43. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  44. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
  45. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +1 -1
  46. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
  47. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  49. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
  51. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +1 -1
  53. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
  54. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  55. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +1 -1
  56. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  57. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
  59. package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +1 -1
  60. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  61. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  62. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  63. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  64. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
  65. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  66. package/src/main/js/sap/ushell/api/S4MyHome.js +33 -2
  67. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +8 -0
  68. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +1 -1
  69. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +1 -1
  70. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +1 -1
  71. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +1 -1
  72. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +1 -1
  73. package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +1 -1
  74. package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +1 -1
  75. package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +1 -1
  76. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +1 -1
  77. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +1 -1
  78. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +1 -1
  79. package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +1 -1
  80. package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +1 -1
  81. package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +1 -1
  82. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +1 -1
  83. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +1 -1
  84. package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +1 -1
  85. package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +1 -1
  86. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +1 -1
  87. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +1 -1
  88. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +1 -1
  89. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +1 -1
  90. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  91. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +1 -1
  92. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +1 -1
  93. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  94. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +1 -1
  95. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  96. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +871 -733
  97. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +50 -50
  98. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +121 -116
  99. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxesCache.js +16 -12
  100. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +2 -4
  101. package/src/main/js/sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler.js +48 -53
  102. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +1 -1
  103. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +2 -1
  104. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +2 -2
  105. package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +26 -5
  106. package/src/main/js/sap/ushell/components/contentFinder/Component.js +20 -13
  107. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +28 -35
  108. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +1 -1
  109. package/src/main/js/sap/ushell/components/contentFinder/controller/WidgetGallery.controller.js +1 -1
  110. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
  111. package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +60 -5
  112. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +17 -6
  113. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ar.properties +6 -0
  114. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_bg.properties +6 -0
  115. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ca.properties +6 -0
  116. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cnr.properties +6 -0
  117. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cs.properties +6 -0
  118. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cy.properties +6 -0
  119. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_da.properties +6 -0
  120. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_de.properties +6 -0
  121. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_el.properties +6 -0
  122. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en.properties +6 -0
  123. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_GB.properties +6 -0
  124. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saprigi.properties +11 -3
  125. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es.properties +6 -0
  126. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es_MX.properties +6 -0
  127. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_et.properties +6 -0
  128. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fi.properties +6 -0
  129. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr.properties +6 -0
  130. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr_CA.properties +6 -0
  131. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hi.properties +6 -0
  132. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hr.properties +6 -0
  133. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hu.properties +6 -0
  134. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_id.properties +6 -0
  135. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_it.properties +6 -0
  136. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_iw.properties +6 -0
  137. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ja.properties +6 -0
  138. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_kk.properties +6 -0
  139. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ko.properties +6 -0
  140. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lt.properties +6 -0
  141. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lv.properties +6 -0
  142. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_mk.properties +6 -0
  143. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ms.properties +6 -0
  144. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_nl.properties +6 -0
  145. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_no.properties +6 -0
  146. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pl.properties +6 -0
  147. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt.properties +6 -0
  148. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt_PT.properties +6 -0
  149. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ro.properties +6 -0
  150. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ru.properties +6 -0
  151. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sh.properties +6 -0
  152. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sk.properties +6 -0
  153. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sl.properties +6 -0
  154. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sr.properties +6 -0
  155. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sv.properties +6 -0
  156. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_th.properties +6 -0
  157. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_tr.properties +6 -0
  158. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_uk.properties +6 -0
  159. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_vi.properties +6 -0
  160. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_CN.properties +6 -0
  161. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_TW.properties +6 -0
  162. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +174 -176
  163. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTree.fragment.xml +28 -7
  164. package/src/main/js/sap/ushell/components/contentFinder/view/ContentFinderDialog.view.xml +1 -1
  165. package/src/main/js/sap/ushell/components/contentFinder/view/VisualizationsNoDataIllustratedMessage.fragment.xml +28 -0
  166. package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +1 -1
  167. package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +17 -14
  168. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
  169. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifestAppSearch.json +1 -1
  170. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  171. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  172. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +1 -1
  173. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +1 -1
  174. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  175. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  176. package/src/main/js/sap/ushell/components/pages/ActionMode.js +6 -1
  177. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  178. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  179. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +2 -2
  180. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  181. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  182. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  183. package/src/main/js/sap/ushell/components/shell/FloatingContainer/Component.js +2 -1
  184. package/src/main/js/sap/ushell/components/shell/FloatingContainer/controls/FloatingContainer.js +74 -5
  185. package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
  186. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  187. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +1 -1
  188. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -1
  189. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
  190. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
  191. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  192. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
  193. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchCEP.controller.js +20 -4
  194. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
  195. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
  196. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  197. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -1
  198. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +1 -1
  199. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +149 -197
  200. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.view.xml +88 -85
  201. package/src/main/js/sap/ushell/components/shell/Settings/appearance/AppearanceEntry.js +15 -19
  202. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  203. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.controller.js +2 -2
  204. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  205. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +1 -1
  206. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +30 -1
  207. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +1 -1
  208. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +30 -16
  209. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
  210. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  211. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
  212. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
  213. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  214. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
  215. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  216. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources.properties +29 -15
  217. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ar.properties +3 -0
  218. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_bg.properties +3 -0
  219. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ca.properties +3 -0
  220. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_cnr.properties +3 -0
  221. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_cs.properties +3 -0
  222. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_cy.properties +3 -0
  223. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_da.properties +3 -0
  224. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_de.properties +3 -0
  225. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_el.properties +3 -0
  226. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en.properties +3 -0
  227. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en_GB.properties +3 -0
  228. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en_US_saprigi.properties +3 -0
  229. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_es.properties +3 -0
  230. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_es_MX.properties +3 -0
  231. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_et.properties +3 -0
  232. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fi.properties +3 -0
  233. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr.properties +3 -0
  234. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr_CA.properties +3 -0
  235. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_hi.properties +3 -0
  236. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_hr.properties +3 -0
  237. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_hu.properties +3 -0
  238. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_id.properties +3 -0
  239. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_it.properties +3 -0
  240. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_iw.properties +4 -1
  241. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ja.properties +3 -0
  242. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_kk.properties +3 -0
  243. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ko.properties +3 -0
  244. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_lt.properties +3 -0
  245. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_lv.properties +3 -0
  246. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_mk.properties +3 -0
  247. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ms.properties +3 -0
  248. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_nl.properties +3 -0
  249. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_no.properties +3 -0
  250. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_pl.properties +3 -0
  251. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_pt.properties +3 -0
  252. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_pt_PT.properties +3 -0
  253. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ro.properties +3 -0
  254. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ru.properties +3 -0
  255. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sh.properties +3 -0
  256. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sk.properties +3 -0
  257. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sl.properties +3 -0
  258. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sr.properties +3 -0
  259. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sv.properties +3 -0
  260. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_th.properties +3 -0
  261. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_tr.properties +3 -0
  262. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_uk.properties +3 -0
  263. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_vi.properties +3 -0
  264. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_zh_CN.properties +3 -0
  265. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_zh_TW.properties +3 -0
  266. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  267. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +1 -1
  268. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  269. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  270. package/src/main/js/sap/ushell/iconfonts.js +2 -1
  271. package/src/main/js/sap/ushell/library.js +1 -1
  272. package/src/main/js/sap/ushell/navigationMode.js +1 -1
  273. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +18 -6
  274. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
  275. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  276. package/src/main/js/sap/ushell/renderer/Renderer.js +21 -20
  277. package/src/main/js/sap/ushell/renderer/Shell.controller.js +378 -576
  278. package/src/main/js/sap/ushell/renderer/Shell.view.js +5 -4
  279. package/src/main/js/sap/ushell/renderer/resources/resources.properties +57 -22
  280. package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +4 -4
  281. package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +4 -4
  282. package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +4 -4
  283. package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +4 -4
  284. package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +4 -4
  285. package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +4 -4
  286. package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +4 -4
  287. package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +4 -4
  288. package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +4 -4
  289. package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +4 -4
  290. package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +4 -4
  291. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +6 -4
  292. package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +3 -3
  293. package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +4 -4
  294. package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +4 -4
  295. package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +4 -4
  296. package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +4 -4
  297. package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +10 -10
  298. package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +4 -4
  299. package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +4 -4
  300. package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +4 -4
  301. package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +9 -9
  302. package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +3 -3
  303. package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +4 -4
  304. package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +4 -4
  305. package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +4 -4
  306. package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +4 -4
  307. package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +4 -4
  308. package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +4 -4
  309. package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +4 -4
  310. package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +1 -1
  311. package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +4 -4
  312. package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +4 -4
  313. package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +4 -4
  314. package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +4 -4
  315. package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +4 -4
  316. package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +4 -4
  317. package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +4 -4
  318. package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +4 -4
  319. package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +4 -4
  320. package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +4 -4
  321. package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +4 -4
  322. package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +4 -4
  323. package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +4 -4
  324. package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +4 -4
  325. package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +4 -4
  326. package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +4 -4
  327. package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +4 -4
  328. package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +4 -4
  329. package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
  330. package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +5 -4
  331. package/src/main/js/sap/ushell/services/AppLifeCycle.js +102 -107
  332. package/src/main/js/sap/ushell/services/AppState.js +1 -1
  333. package/src/main/js/sap/ushell/services/Bookmark.js +1 -1
  334. package/src/main/js/sap/ushell/services/BookmarkV2.js +1 -1
  335. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +1 -1
  336. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +1 -1
  337. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +1 -1
  338. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +1 -1
  339. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +1 -1
  340. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +1 -1
  341. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +1 -1
  342. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +1 -1
  343. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +1 -1
  344. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +1 -1
  345. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +2 -2
  346. package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +1 -1
  347. package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +1 -1
  348. package/src/main/js/sap/ushell/services/CommonDataModel.js +1 -1
  349. package/src/main/js/sap/ushell/services/Configuration.js +1 -1
  350. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
  351. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
  352. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +1 -1
  353. package/src/main/js/sap/ushell/services/DarkModeSupport.js +161 -144
  354. package/src/main/js/sap/ushell/services/Extension/Item.js +1 -1
  355. package/src/main/js/sap/ushell/services/Extension.js +3 -3
  356. package/src/main/js/sap/ushell/services/FlpLaunchPage.js +1 -1
  357. package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +1 -1
  358. package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +1 -1
  359. package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +1 -1
  360. package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +1 -1
  361. package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +1 -1
  362. package/src/main/js/sap/ushell/services/FrameBoundExtension.js +1 -1
  363. package/src/main/js/sap/ushell/services/LaunchPage.js +1 -1
  364. package/src/main/js/sap/ushell/services/Menu.js +1 -1
  365. package/src/main/js/sap/ushell/services/Message.js +1 -1
  366. package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +1 -1
  367. package/src/main/js/sap/ushell/services/MessageBroker.js +1 -1
  368. package/src/main/js/sap/ushell/services/MessageInternal.js +1 -1
  369. package/src/main/js/sap/ushell/services/Navigation/compatibility.js +1 -1
  370. package/src/main/js/sap/ushell/services/Navigation/utils.js +1 -1
  371. package/src/main/js/sap/ushell/services/Navigation.js +1 -1
  372. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +1 -1
  373. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
  374. package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
  375. package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
  376. package/src/main/js/sap/ushell/services/Pages.js +1 -1
  377. package/src/main/js/sap/ushell/services/Personalization.js +1 -1
  378. package/src/main/js/sap/ushell/services/PersonalizationV2.js +1 -1
  379. package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +1 -1
  380. package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +1 -1
  381. package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +1 -1
  382. package/src/main/js/sap/ushell/services/PluginManager.js +1 -1
  383. package/src/main/js/sap/ushell/services/ReferenceResolver.js +74 -100
  384. package/src/main/js/sap/ushell/services/Search.js +1 -1
  385. package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
  386. package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
  387. package/src/main/js/sap/ushell/services/ShellNavigation.js +1 -1
  388. package/src/main/js/sap/ushell/services/SmartNavigation.js +1 -1
  389. package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
  390. package/src/main/js/sap/ushell/services/UITracer.js +1 -1
  391. package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
  392. package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
  393. package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +2 -1
  394. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +1 -1
  395. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
  396. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  397. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  398. package/src/main/js/sap/ushell/services/UserRecents.js +4 -4
  399. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
  400. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -1
  401. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  402. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
  403. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +1 -1
  404. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  405. package/src/main/js/sap/ushell/state/ShellModel.js +31 -0
  406. package/src/main/js/sap/ushell/state/StateManager.js +28 -0
  407. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  408. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.ttf +0 -0
  409. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff +0 -0
  410. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff2 +0 -0
  411. package/src/main/js/sap/ushell/themes/base/library.source.less +0 -1
  412. package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +0 -1
  413. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +0 -1
  414. package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +0 -1
  415. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
  416. package/src/main/js/sap/ushell/ui/footerbar/AboutButton.js +17 -21
  417. package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +358 -100
  418. package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.fragment.xml +169 -90
  419. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  420. package/src/main/js/sap/ushell/ui/launchpad/Page.js +77 -9
  421. package/src/main/js/sap/ushell/ui/launchpad/PageRenderer.js +20 -20
  422. package/src/main/js/sap/ushell/ui/launchpad/Section.js +1 -1
  423. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
  424. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
  425. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  426. package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +1 -1
  427. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  428. package/src/main/js/sap/ushell/utils/DynamicTileRequest.js +1 -3
  429. package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +3 -1
  430. package/src/main/js/sap/ushell/utils/UrlParsing.js +38 -0
  431. package/src/main/js/sap/ushell/utils/UrlShortening.js +1 -1
  432. package/src/main/js/sap/ushell/utils/workpage/DestinationResolver.js +13 -1
  433. package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +1 -1
  434. package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +1 -1
  435. package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +1 -1
  436. package/src/main/js/sap/ushell/utils/workpage/resources/resources.properties +43 -27
  437. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ar.properties +2 -2
  438. package/src/main/js/sap/ushell/utils/workpage/resources/resources_bg.properties +2 -2
  439. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ca.properties +2 -2
  440. package/src/main/js/sap/ushell/utils/workpage/resources/resources_cnr.properties +2 -2
  441. package/src/main/js/sap/ushell/utils/workpage/resources/resources_cs.properties +2 -2
  442. package/src/main/js/sap/ushell/utils/workpage/resources/resources_cy.properties +2 -2
  443. package/src/main/js/sap/ushell/utils/workpage/resources/resources_da.properties +2 -2
  444. package/src/main/js/sap/ushell/utils/workpage/resources/resources_de.properties +2 -2
  445. package/src/main/js/sap/ushell/utils/workpage/resources/resources_el.properties +2 -2
  446. package/src/main/js/sap/ushell/utils/workpage/resources/resources_en.properties +2 -2
  447. package/src/main/js/sap/ushell/utils/workpage/resources/resources_en_GB.properties +2 -2
  448. package/src/main/js/sap/ushell/utils/workpage/resources/resources_es.properties +2 -2
  449. package/src/main/js/sap/ushell/utils/workpage/resources/resources_es_MX.properties +2 -2
  450. package/src/main/js/sap/ushell/utils/workpage/resources/resources_et.properties +2 -2
  451. package/src/main/js/sap/ushell/utils/workpage/resources/resources_fi.properties +2 -2
  452. package/src/main/js/sap/ushell/utils/workpage/resources/resources_fr.properties +2 -2
  453. package/src/main/js/sap/ushell/utils/workpage/resources/resources_fr_CA.properties +2 -2
  454. package/src/main/js/sap/ushell/utils/workpage/resources/resources_hi.properties +2 -2
  455. package/src/main/js/sap/ushell/utils/workpage/resources/resources_hr.properties +2 -2
  456. package/src/main/js/sap/ushell/utils/workpage/resources/resources_hu.properties +5 -5
  457. package/src/main/js/sap/ushell/utils/workpage/resources/resources_id.properties +2 -2
  458. package/src/main/js/sap/ushell/utils/workpage/resources/resources_it.properties +2 -2
  459. package/src/main/js/sap/ushell/utils/workpage/resources/resources_iw.properties +2 -2
  460. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ja.properties +2 -2
  461. package/src/main/js/sap/ushell/utils/workpage/resources/resources_kk.properties +2 -2
  462. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ko.properties +2 -2
  463. package/src/main/js/sap/ushell/utils/workpage/resources/resources_lt.properties +2 -2
  464. package/src/main/js/sap/ushell/utils/workpage/resources/resources_lv.properties +2 -2
  465. package/src/main/js/sap/ushell/utils/workpage/resources/resources_mk.properties +2 -2
  466. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ms.properties +2 -2
  467. package/src/main/js/sap/ushell/utils/workpage/resources/resources_nl.properties +2 -2
  468. package/src/main/js/sap/ushell/utils/workpage/resources/resources_no.properties +2 -2
  469. package/src/main/js/sap/ushell/utils/workpage/resources/resources_pl.properties +2 -2
  470. package/src/main/js/sap/ushell/utils/workpage/resources/resources_pt.properties +2 -2
  471. package/src/main/js/sap/ushell/utils/workpage/resources/resources_pt_PT.properties +2 -2
  472. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ro.properties +2 -2
  473. package/src/main/js/sap/ushell/utils/workpage/resources/resources_ru.properties +2 -2
  474. package/src/main/js/sap/ushell/utils/workpage/resources/resources_sh.properties +2 -2
  475. package/src/main/js/sap/ushell/utils/workpage/resources/resources_sk.properties +2 -2
  476. package/src/main/js/sap/ushell/utils/workpage/resources/resources_sl.properties +2 -2
  477. package/src/main/js/sap/ushell/utils/workpage/resources/resources_sr.properties +2 -2
  478. package/src/main/js/sap/ushell/utils/workpage/resources/resources_sv.properties +2 -2
  479. package/src/main/js/sap/ushell/utils/workpage/resources/resources_th.properties +2 -2
  480. package/src/main/js/sap/ushell/utils/workpage/resources/resources_tr.properties +2 -2
  481. package/src/main/js/sap/ushell/utils/workpage/resources/resources_uk.properties +3 -3
  482. package/src/main/js/sap/ushell/utils/workpage/resources/resources_vi.properties +2 -2
  483. package/src/main/js/sap/ushell/utils/workpage/resources/resources_zh_CN.properties +2 -2
  484. package/src/main/js/sap/ushell/utils/workpage/resources/resources_zh_TW.properties +2 -2
  485. package/src/main/js/sap/ushell/utils.js +8 -20
  486. package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
  487. package/src/main/js/sap/ushell/themes/base/AppearanceView.less +0 -213
  488. package/src/main/js/sap/ushell/themes/sap_belize_base/AppearanceView.less +0 -213
  489. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/AppearanceView.less +0 -213
  490. package/src/main/js/sap/ushell/themes/sap_hcb/base_AppearanceView.less +0 -213
@@ -18,7 +18,6 @@ sap.ui.define([
18
18
  "sap/ui/core/routing/History",
19
19
  "sap/ui/Device",
20
20
  "sap/ui/performance/trace/Interaction",
21
- "sap/ui/performance/Measurement",
22
21
  "sap/ui/thirdparty/hasher",
23
22
  "sap/ui/thirdparty/jquery",
24
23
  "sap/ushell/bootstrap/SchedulingAgent",
@@ -32,6 +31,7 @@ sap.ui.define([
32
31
  "sap/ushell/resources",
33
32
  "sap/ushell/services/AppConfiguration",
34
33
  "sap/ushell/utils",
34
+ "sap/ushell/utils/UrlParsing",
35
35
  "sap/ushell/utils/WindowUtils",
36
36
  "sap/ushell/renderer/ShellLayout",
37
37
  "sap/ushell/renderer/utils",
@@ -58,7 +58,6 @@ sap.ui.define([
58
58
  Ui5History,
59
59
  Device,
60
60
  Interaction,
61
- Measurement,
62
61
  hasher,
63
62
  jQuery,
64
63
  SchedulingAgent,
@@ -72,6 +71,7 @@ sap.ui.define([
72
71
  ushellResources,
73
72
  AppConfiguration,
74
73
  ushellUtils,
74
+ UrlParsing,
75
75
  WindowUtils,
76
76
  ShellLayout,
77
77
  RendererUtils,
@@ -119,7 +119,7 @@ sap.ui.define([
119
119
  newWindow: 1,
120
120
  replace: 0
121
121
  };
122
- const oNavigationMode = {
122
+ const NavigationMode = {
123
123
  embedded: "embedded",
124
124
  newWindowThenEmbedded: "newWindowThenEmbedded",
125
125
  newWindow: "newWindow",
@@ -304,40 +304,18 @@ sap.ui.define([
304
304
 
305
305
  this.history = History;
306
306
  this.oViewPortContainer = Element.getElementById("viewPortContainer");
307
- AppLifeCycleAI.init(this.oViewPortContainer, oViewConfig.rootIntent, oViewConfig.disableHomeAppCache);
307
+ AppLifeCycleAI.init(this.oViewPortContainer, oViewConfig.disableHomeAppCache);
308
308
 
309
309
  // init Shell Navigation
310
- const initShellNavigationInternal = function (oShellNavigationInternal, oAppLifeCycleService) {
311
- this.oShellNavigationInternal = oShellNavigationInternal;
312
- this.oShellNavigationInternal.registerPrivateFilters(oAppLifeCycleService);
313
-
314
- // register the router in the ShellNavigationInternal to let it skip the split of hash before firing the hashChange event
315
- this.oShellNavigationInternal.registerExtraRouter(oRouter);
316
- this.oShellNavigationInternal.registerNavigationFilter(this._handleEmptyHash.bind(this));
317
- // must be after event registration (for synchronous nav target resolver calls)
318
- this.oShellNavigationInternal.init(this.doHashChange.bind(this));
319
-
320
- this.oShellNavigationInternal.registerNavigationFilter(this._disableSourceAppRouter.bind(this));
321
-
322
- this.oShellNavigationInternal.registerNavigationFilter(this.handleDataLoss.bind(this));
323
- this.oShellNavigationInternal.registerNavigationFilter(this._unblockUI.bind(this));
324
-
325
- AppLifeCycleAI.registerHandleHashChange(this.oShellNavigationInternal);
326
- // enable the direct app start and tests to wait for the initialization
327
- EventHub.emit("ShellNavigationInitialized", Date.now());
328
- }.bind(this);
329
-
330
310
  Promise.all([
331
- Container.getServiceAsync("URLParsing"),
332
311
  Container.getServiceAsync("ShellNavigationInternal"),
333
312
  Container.getServiceAsync("AppLifeCycle")
334
313
  ])
335
314
  .then((aServices) => {
336
- this.oURLParsing = aServices[0];
337
- const oShellNavigationInternal = aServices[1];
338
- this._oAppLifeCycleService = aServices[2];
315
+ const oShellNavigationInternal = aServices[0];
316
+ this._oAppLifeCycleService = aServices[1];
339
317
 
340
- initShellNavigationInternal(oShellNavigationInternal, this._oAppLifeCycleService);
318
+ this._initShellNavigationInternal(oShellNavigationInternal, this._oAppLifeCycleService, oRouter);
341
319
  });
342
320
 
343
321
  Container.setLogonFrameProvider(this._getLogonFrameProvider());
@@ -414,6 +392,33 @@ sap.ui.define([
414
392
  }
415
393
  },
416
394
 
395
+ /**
396
+ * @param {object} oShellNavigationInternal
397
+ * @param {object} oAppLifeCycleService
398
+ * @param {object} oRouter
399
+ */
400
+ _initShellNavigationInternal: function (oShellNavigationInternal, oAppLifeCycleService, oRouter) {
401
+ this.oShellNavigationInternal = oShellNavigationInternal;
402
+ this.oShellNavigationInternal.registerPrivateFilters(oAppLifeCycleService);
403
+
404
+ // register the router in the ShellNavigationInternal to let it skip the split of hash before firing the hashChange event
405
+ this.oShellNavigationInternal.registerExtraRouter(oRouter);
406
+ this.oShellNavigationInternal.registerNavigationFilter(this._handleEmptyHash.bind(this));
407
+ // must be after event registration (for synchronous nav target resolver calls)
408
+ this.oShellNavigationInternal.init(this.doHashChange.bind(this));
409
+
410
+ this.oShellNavigationInternal.registerNavigationFilter(this._disableSourceAppRouter.bind(this));
411
+
412
+ this.oShellNavigationInternal.registerNavigationFilter(this.handleDataLoss.bind(this));
413
+ this.oShellNavigationInternal.registerNavigationFilter(this._unblockUI.bind(this));
414
+
415
+ AppLifeCycleAI.registerHandleHashChange(this.oShellNavigationInternal);
416
+ // enable the direct app start and tests to wait for the initialization
417
+ EventHub.emit("ShellNavigationInitialized", Date.now());
418
+ },
419
+
420
+ /**
421
+ */
417
422
  _bindTabTitle: function () {
418
423
  const oBinding = ShellModel.getModel().bindProperty("/application/title");
419
424
  oBinding.attachChange(() => {
@@ -472,20 +477,19 @@ sap.ui.define([
472
477
  * This method currently assumes that the application is displayed in the "minimal" state (no home button present).
473
478
  */
474
479
  _onBackNavigationChanged: function (oEvent) {
475
- AppLifeCycleAI.setBackNavigationChanged(true);
476
480
  const fnCallback = oEvent.getParameters().data;
477
481
  const sCurrentShellMode = StateManager.getShellMode();
478
482
  const sCurrentLaunchpadState = StateManager.getLaunchpadState();
479
483
 
480
484
  if (fnCallback) {
481
- AppLifeCycleAI.service().setNavigateBack(fnCallback);
485
+ RelatedServices.setNavigateBack(fnCallback);
482
486
 
483
487
  if (sCurrentLaunchpadState === LaunchpadState.App && [Minimal, Standalone, Embedded].includes(sCurrentShellMode)) {
484
488
  Container.getRendererInternal("fiori2").showHeaderItem("backBtn", true);
485
489
  }
486
490
  } else {
487
491
  //if no callback is provided we set the default handler: history back
488
- AppLifeCycleAI.service().resetNavigateBack();
492
+ RelatedServices.resetNavigateBack();
489
493
  }
490
494
  },
491
495
 
@@ -636,12 +640,14 @@ sap.ui.define([
636
640
  },
637
641
 
638
642
  onExit: function () {
643
+ closeAllDialogs = true;
644
+
639
645
  this._aDoables.forEach((oDoable) => {
640
646
  oDoable.off();
641
647
  });
642
648
  this._aDoables = [];
643
649
 
644
- ShellUIServiceFactory.detachBackNavigationChanged(this._onBackNavigationChange, this);
650
+ ShellUIServiceFactory.detachBackNavigationChanged(this._onBackNavigationChanged, this);
645
651
 
646
652
  this._aDanglingControls.forEach((oControl) => {
647
653
  oControl.destroy();
@@ -658,7 +664,7 @@ sap.ui.define([
658
664
  EventBus.getInstance().unsubscribe("sap.ushell", "appOpened", this.onAppOpened, this);
659
665
 
660
666
  // Some qUnits destroy the shell very early, check if oShellNavigationInternal exists
661
- if (this.oShellNavigationInternal) {
667
+ if (this.oShellNavigationInternal && this.oShellNavigationInternal.hashChanger) {
662
668
  this.oShellNavigationInternal.hashChanger.destroy();
663
669
  }
664
670
 
@@ -764,7 +770,7 @@ sap.ui.define([
764
770
  }
765
771
 
766
772
  // Do we do an ex-place navigation?
767
- const oParsedHash = this.oURLParsing.parseShellHash(targetIntent);
773
+ const oParsedHash = UrlParsing.parseShellHash(targetIntent);
768
774
  const bBuiltInIntent = Container.getRendererInternal()._isBuiltInIntent(oParsedHash);
769
775
  const aParsedNavMode = oParsedHash.params["sap-ushell-navmode"];
770
776
  const sNavMode = aParsedNavMode && aParsedNavMode[0];
@@ -828,7 +834,7 @@ sap.ui.define([
828
834
  const oResolvedHashFragment = await oService.resolveHashFragment(sTargetHash);
829
835
 
830
836
  const bIsExplaceNavigation = oResolvedHashFragment.targetNavigationMode === "explace" || oResolvedHashFragment.targetNavigationMode === "frameless";
831
- const bIsBackNavigationAndNewWindow = bIsBackNavigation && oResolvedHashFragment.navigationMode === oNavigationMode.newWindowThenEmbedded;
837
+ const bIsBackNavigationAndNewWindow = bIsBackNavigation && oResolvedHashFragment.navigationMode === NavigationMode.newWindowThenEmbedded;
832
838
 
833
839
  if (bIsExplaceNavigation && (!bIsBackNavigationAndNewWindow)) {
834
840
  this.bExplaceNavigation = true;
@@ -1082,174 +1088,178 @@ sap.ui.define([
1082
1088
  */
1083
1089
  doHashChange: function (sShellHash, sAppPart, sOldShellHash, sOldAppPart, oParseError) {
1084
1090
  Log.debug(`${sLogFesrPrefix} Interaction Start`, "doHashChange", sModuleName);
1085
- const fnResolveInteraction = this._notifyAsyncStep();
1086
-
1087
- //Performance Debug
1088
- Measurement.start("FLP:ShellController.doHashChange", "doHashChange", "FLP");
1089
1091
  ushellUtils.setPerformanceMark("FLP-ShellController-doHashChange-begin");
1090
1092
  EventHub.emit("trackHashChange", sShellHash);
1091
1093
 
1092
- const oDashboard = Element.getElementById("sapUshellDashboardPage");
1093
- if (oDashboard) {
1094
- oDashboard.setBlocked(true);
1095
- oDashboard.setBusy(true);
1096
- }
1097
-
1098
1094
  const oDeferred = new jQuery.Deferred();
1099
1095
 
1100
- this._doHashChange(this, sShellHash, sAppPart, sOldShellHash, sOldAppPart, oParseError)
1101
- .catch(() => {
1102
- EventHub.emit("doHashChangeError", Date.now());
1103
- if (oDashboard) {
1104
- oDashboard.setBlocked(false);
1105
- oDashboard.setBusy(false);
1106
- }
1107
- })
1108
- .finally(() => {
1109
- Measurement.end("FLP:ShellController.doHashChange");
1110
-
1111
- Log.debug(`${sLogFesrPrefix} Interaction End`, "doHashChange", sModuleName);
1112
- fnResolveInteraction();
1113
-
1114
- oDeferred.resolve();
1115
- });
1116
-
1117
- return oDeferred.promise();
1118
- },
1119
-
1120
- _doHashChange: async function (oShellController, sShellHash, sAppPart, sOldShellHash, sOldAppPart, oParseError) {
1121
1096
  // reset here because the result of wasHistoryEntryReplaced is only useful in navigation filters
1122
1097
  // and might give inconsistent results after this point.
1123
- this._wasHistoryEntryReplaced = this.oShellNavigationInternal.wasHistoryEntryReplaced();
1098
+ this._bWasHistoryEntryReplaced = this.oShellNavigationInternal.wasHistoryEntryReplaced();
1124
1099
  this.oShellNavigationInternal.resetHistoryEntryReplaced();
1125
- let oInMemoryApplicationInstance;
1126
1100
 
1127
1101
  if (!this.bEnableHashChange) {
1128
1102
  this.bEnableHashChange = true;
1129
- return;
1103
+ oDeferred.resolve();
1104
+ return oDeferred.promise();
1130
1105
  }
1131
- //When the application is opened in the new tab, the ShellHashEvent should be fired in order to update UI5 hasher,
1132
- //but the application should not be resolved again.
1106
+
1107
+ // When the application is opened in the new tab, the ShellHashEvent should be fired in order to update UI5 hasher,
1108
+ // but the application should not be resolved again.
1133
1109
  if (this.bRestorePreviousHash) {
1134
1110
  this.bRestorePreviousHash = false;
1135
- return;
1111
+ oDeferred.resolve();
1112
+ return oDeferred.promise();
1136
1113
  }
1137
1114
 
1115
+ const sFixedShellHash = UrlParsing.ensureLeadingHash(sShellHash);
1116
+ const sFixedOldShellHash = UrlParsing.ensureLeadingHash(sOldShellHash);
1117
+
1118
+ // todo [FLPCOREANDUX-10024] where does this oParseError come from?
1138
1119
  if (oParseError) {
1139
- await oShellController.hashChangeFailure(
1140
- oShellController.history.getHistoryLength(),
1120
+ Log.error(`Error when parsing the hash: '${sFixedShellHash}'`, oParseError);
1121
+ this.hashChangeFailure(
1122
+ this.history.getHistoryLength(),
1141
1123
  oParseError.message,
1142
1124
  null,
1143
1125
  "sap.ushell.renderer.Shell.controller",
1144
1126
  false
1145
- );
1146
- return;
1127
+ )
1128
+ .then(oDeferred.resolve.bind(oDeferred))
1129
+ .catch(oDeferred.reject.bind(oDeferred));
1130
+ return oDeferred.promise();
1147
1131
  }
1148
1132
 
1149
- // save current history length to handle errors (in case)
1150
- const iOriginalHistoryLength = oShellController.history.getHistoryLength();
1133
+ const oDashboard = Element.getElementById("sapUshellDashboardPage");
1134
+ if (oDashboard) {
1135
+ oDashboard.setBlocked(true);
1136
+ oDashboard.setBusy(true);
1137
+ }
1151
1138
 
1152
- const sFixedShellHash = oShellController.fixShellHash(sShellHash);
1153
- const sOldFixedShellHash = oShellController.fixShellHash(sOldShellHash);
1139
+ const fnResolveInteraction = this._notifyAsyncStep();
1140
+
1141
+ this._doHashChange(sFixedShellHash, sAppPart, sFixedOldShellHash)
1142
+ .catch(() => {
1143
+ EventHub.emit("doHashChangeError", Date.now());
1144
+ })
1145
+ .finally(() => {
1146
+ Log.debug(`${sLogFesrPrefix} Interaction End`, "doHashChange", sModuleName);
1147
+ fnResolveInteraction();
1148
+
1149
+ if (oDashboard) {
1150
+ oDashboard.setBlocked(false);
1151
+ oDashboard.setBusy(false);
1152
+ }
1153
+
1154
+ oDeferred.resolve();
1155
+ });
1156
+
1157
+ return oDeferred.promise();
1158
+ },
1159
+
1160
+ _doHashChange: async function (sShellHash, sAppPart, sOldShellHash) {
1161
+ // save current history length to handle errors (in case)
1162
+ const iOriginalHistoryLength = this.history.getHistoryLength();
1154
1163
 
1155
1164
  // track hash change
1156
- oShellController.history.hashChange(sFixedShellHash, sOldShellHash);
1165
+ this.history.hashChange(sShellHash, sOldShellHash);
1157
1166
 
1158
1167
  // we save the current-application before resolving the next navigation's fragment,
1159
1168
  // as in cases of navigation in a new window we need to set it back for the app-configuration to be consistent
1160
- oShellController.currentAppBeforeNav = AppConfiguration.getCurrentApplication();
1169
+ const oOldResolvedHashFragment = AppConfiguration.getCurrentApplication();
1161
1170
 
1162
1171
  try {
1163
- const oResult = await oShellController._resolveHashFragment(sFixedShellHash);
1164
- let oResolvedHashFragment = oResult.resolvedHashFragment;
1165
- const oParsedShellHash = oResult.parsedShellHash;
1166
-
1167
1172
  // NOTE: AppConfiguration.setCurrentApplication was called with the currently resolved target.
1168
- const sIntent = oParsedShellHash ? `${oParsedShellHash.semanticObject}-${oParsedShellHash.action}` : "";
1169
- const oConfig = oShellController._getConfig();
1170
- const bComponentLoaded = !!(oResolvedHashFragment && oResolvedHashFragment.componentHandle);
1171
- // for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1172
- // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1173
- const sTargetUi5ComponentName = oResolvedHashFragment && oResolvedHashFragment.ui5ComponentName;
1174
-
1175
- // calculate effective Navigation Mode with resolution result and current Application,
1176
- // we will determine the next navigation mode.
1177
- oResolvedHashFragment = oShellController._calculateNavigationMode(oResolvedHashFragment);
1178
-
1179
- // do not stall for initial navigation
1180
- if (oShellController.currentAppBeforeNav) {
1181
- // store the state of the current app before opening the new app
1182
- AppLifeCycleAI.storeAppExtensions();
1183
- // stall all state management changes, those __most probably__ come from the target application
1184
- StateManager.stallChanges();
1185
- }
1173
+ const oResult = await this._resolveHashFragment(sShellHash);
1186
1174
 
1187
- const bProcessed = await oShellController._handleEarlyNavigation(sFixedShellHash, sAppPart, oResolvedHashFragment);
1188
- if (bProcessed) {
1189
- // navigation was NWBC or explace, any changes were done by the source application
1190
- StateManager.applyStalledChanges();
1175
+ // Only for testing
1176
+ if (!oResult && window.QUnit !== undefined) {
1177
+ // return without navigation if no result was returned.
1191
1178
  return;
1192
1179
  }
1193
1180
 
1194
- // add application config to the application properties
1195
- if (oConfig && oConfig.applications && oConfig.applications[sIntent]) {
1196
- oResolvedHashFragment.applicationConfiguration = oConfig.applications[sIntent];
1197
- }
1181
+ const oResolvedHashFragment = oResult.resolvedHashFragment;
1182
+ const oParsedShellHash = oResult.parsedShellHash;
1198
1183
 
1199
- oInMemoryApplicationInstance = AppLifeCycleAI.getInMemoryInstance(sIntent, sFixedShellHash, sAppPart, sOldShellHash);
1184
+ // todo: [FLPCOREANDUX-10024] is this a real life use case?
1185
+ /*
1186
+ * A null navigationMode indicates that no hashFragment was resolved.
1187
+ * However, we need to restore the current hash to the previous one.
1188
+ * If cold start happened (history has only one entry), we go to the shell home.
1189
+ */
1190
+ if (oResolvedHashFragment.navigationMode === null) {
1191
+ if (ushellUtils.isColdStart()) {
1192
+ window.hasher.setHash("");
1193
+ return;
1194
+ }
1200
1195
 
1201
- if (oInMemoryApplicationInstance.isInstanceSupported) {
1202
- await oShellController._initiateApplication(oResolvedHashFragment, sFixedShellHash, oParsedShellHash, iOriginalHistoryLength, sAppPart, sOldFixedShellHash, sOldAppPart);
1196
+ this.bEnableHashChange = false;
1197
+ this.history.pop();
1198
+ this._windowHistoryBack(1);
1203
1199
  return;
1204
1200
  }
1205
1201
 
1206
- if (bComponentLoaded || !sTargetUi5ComponentName) {
1207
- if ((oResolvedHashFragment.applicationType === "URL" || ushellUtils.isSAPLegacyApplicationType(oResolvedHashFragment.applicationType))
1208
- && oInMemoryApplicationInstance.isInstanceSupported === false && oInMemoryApplicationInstance.appId) {
1209
- await AppLifeCycleAI.destroyApplication(oInMemoryApplicationInstance.appId, oInMemoryApplicationInstance.container);
1210
- }
1211
- await oShellController._initiateApplication(oResolvedHashFragment, sFixedShellHash, oParsedShellHash, iOriginalHistoryLength, sAppPart, sOldFixedShellHash, sOldAppPart);
1202
+ // store the state of the current app before opening the new app
1203
+ await AppLifeCycleAI.storeAppExtensions();
1204
+
1205
+ // stall all state management changes, those __most probably__ come from the target application
1206
+ StateManager.stallChanges();
1207
+
1208
+ const bOpenedViaNWBC = await this._openAppViaNWBC(oResolvedHashFragment, oOldResolvedHashFragment);
1209
+ if (bOpenedViaNWBC === true) {
1210
+ this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
1211
+ Log.info("NWBC application was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
1212
+ });
1213
+
1214
+ StateManager.applyStalledChanges();
1212
1215
  return;
1213
1216
  }
1214
1217
 
1215
- AppLifeCycleAI.destroyApplication(oInMemoryApplicationInstance.appId, oInMemoryApplicationInstance.container);
1216
- AppLifeCycleAI.removeApplication(sIntent);
1217
- AppConfiguration.setApplicationInInitMode();
1218
+ if (oResolvedHashFragment.navigationMode === NavigationMode.newWindow) {
1219
+ // add the app to application usage log
1220
+ this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
1221
+ Log.info("Application in new window was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
1222
+ });
1223
+ await this._openAppExplace(oResolvedHashFragment, oOldResolvedHashFragment);
1218
1224
 
1219
- /*
1220
- * normal application:
1221
- * fire the _prior.newUI5ComponentInstantion event before creating the new component instance, so that
1222
- * the ApplicationContainer can stop the router of the current app (avoid inner-app hash change notifications)
1223
- * NOTE: this dependency to the ApplicationContainer is not nice, but we need a fast fix now; we should refactor
1224
- * the ApplicationContainer code, because most of the logic has to be done by the shell controller;
1225
- * maybe rather introduce a utility module
1226
- */
1227
- EventBus.getInstance().publish("ApplicationContainer", "_prior.newUI5ComponentInstantion",
1228
- { name: sTargetUi5ComponentName }
1229
- );
1225
+ StateManager.applyStalledChanges(); // no changes were done by the source application
1226
+ return;
1227
+ }
1230
1228
 
1231
- //Performance Debug
1232
- Measurement.start("FLP:ShellController.UI5createComponent", "UI5 createComponent", "FLP");
1229
+ // Handle "/core/shell/model/migrationConfig"
1230
+ const bHandledViaMigrationConfig = this._rewriteRootIntentForMigrationConfig(oResolvedHashFragment, sShellHash);
1231
+ if (bHandledViaMigrationConfig) {
1232
+ StateManager.applyStalledChanges(); // no changes were done by the source application
1233
+ return;
1234
+ }
1233
1235
 
1234
- // load ui5 component via shell service; core-ext-light will be loaded as part of the asyncHints
1235
- await Container.getServiceAsync("Ui5ComponentLoader");
1236
+ // todo: [FLPCOREANDUX-10024] simplify error handling
1236
1237
  try {
1237
- await AppLifeCycleAI.createComponent(oResolvedHashFragment, oParsedShellHash);
1238
-
1239
-
1240
- /*
1241
- * return value is unused.
1242
- * This is because oResolvedHashFragment contains the component handle already.
1243
- * See the preceding note in AppLifeCycle.createComponent.
1244
- */
1245
- Measurement.end("FLP:ShellController.UI5createComponent");
1246
- await oShellController._initiateApplication(oResolvedHashFragment, sFixedShellHash, oParsedShellHash, iOriginalHistoryLength, sAppPart, sOldFixedShellHash, sOldAppPart);
1238
+ const bPreviousIsInitialNavigation = this.oShellNavigationInternal.isInitialNavigation();
1239
+ try {
1240
+ await this._openAppInplace(oParsedShellHash, sShellHash, oResolvedHashFragment, sOldShellHash, sAppPart, oOldResolvedHashFragment);
1241
+ } catch (oError) {
1242
+ Log.error(`Application initialization for intent "${sShellHash}" failed.`, oError);
1243
+
1244
+ // assumption is that the resolvedHashFragment already contains the componentHandle
1245
+ const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
1246
+ this.oShellNavigationInternal.setIsInitialNavigation(bPreviousIsInitialNavigation);
1247
+ await this.hashChangeFailure(
1248
+ iOriginalHistoryLength,
1249
+ oError.name,
1250
+ oError.message,
1251
+ oMetadata ? oMetadata.title : "",
1252
+ false
1253
+ );
1254
+ }
1247
1255
  } catch (oError) {
1248
- const sErrorReason = ushellResources.i18n.getText("cannot_load_ui5_component_details", [sFixedShellHash]);
1249
- const sErrorReasonEnglish = `Failed to load UI5 component for navigation intent "${sFixedShellHash}"`;
1256
+ Log.error("Failed to open application", oError, "sap.ushell.renderer.Shell.controller");
1257
+
1258
+ const sErrorReason = ushellResources.i18n.getText("cannot_load_ui5_component_details", [sShellHash]);
1259
+ const sErrorReasonEnglish = `Failed to load UI5 component for navigation intent "${sShellHash}"`;
1250
1260
 
1251
- AppConfiguration.setCurrentApplication(oShellController.currentAppBeforeNav);
1252
- await oShellController.hashChangeFailure(
1261
+ AppConfiguration.setCurrentApplication(oOldResolvedHashFragment);
1262
+ await this.hashChangeFailure(
1253
1263
  iOriginalHistoryLength,
1254
1264
  {
1255
1265
  title: ushellResources.i18n.getText("error"),
@@ -1265,11 +1275,12 @@ sap.ui.define([
1265
1275
  );
1266
1276
  }
1267
1277
  } catch (oError) {
1268
- const sErrorReason = ushellResources.i18n.getText("cannot_resolve_navigation_target_details", [sFixedShellHash]);
1278
+ Log.error("Hash change handling failed. Could not open app.", oError, "sap.ushell.renderer.Shell.controller");
1279
+ const sErrorReason = ushellResources.i18n.getText("cannot_resolve_navigation_target_details", [sShellHash]);
1269
1280
  // eslint-disable-next-line max-len
1270
- const sErrorReasonEnglish = `Failed to resolve navigation target "${sFixedShellHash}". This is most likely caused by an incorrect SAP Fiori launchpad content configuration or by missing role assignment.`;
1281
+ const sErrorReasonEnglish = `Failed to resolve navigation target "${sShellHash}". This is most likely caused by an incorrect SAP Fiori launchpad content configuration or by missing role assignment.`;
1271
1282
 
1272
- await oShellController.hashChangeFailure(
1283
+ await this.hashChangeFailure(
1273
1284
  iOriginalHistoryLength,
1274
1285
  {
1275
1286
  title: ushellResources.i18n.getText("error"),
@@ -1278,7 +1289,7 @@ sap.ui.define([
1278
1289
  },
1279
1290
  {
1280
1291
  info: sErrorReason,
1281
- fixedShellHash: sFixedShellHash,
1292
+ fixedShellHash: sShellHash,
1282
1293
  technicalMessage: oError.message
1283
1294
  },
1284
1295
  "sap.ushell.renderer.Shell.controller",
@@ -1289,79 +1300,16 @@ sap.ui.define([
1289
1300
  }
1290
1301
  },
1291
1302
 
1292
- /**
1293
- * Attempts to navigate to the target application via a shortcut,
1294
- * without executing unnecessary AppLifeCycle navigation logic (e.g.,
1295
- * application component initialization).
1296
- *
1297
- * This might be necessary when the navigation should not be handled in
1298
- * the current window context anymore, for example, when the
1299
- * application should be opened in a new window, or NWBC takes over the
1300
- * navigation task.
1301
- *
1302
- * @param {string} sFixedShellHash
1303
- * The hash fragment including "#"
1304
- * @param {string} sAppPart
1305
- * The inner app route part of the intent
1306
- * @param {object} oResolvedHashFragment
1307
- * The resolved target intent
1308
- *
1309
- * @returns {Promise<boolean>} Whether the navigation was handled.
1310
- * @private
1311
- */
1312
- _handleEarlyNavigation: async function (sFixedShellHash, sAppPart, oResolvedHashFragment) {
1313
- const oDashboard = Element.getElementById("sapUshellDashboardPage");
1314
-
1315
- const bOpenedViaNWBC = await this._openAppViaNWBC(oResolvedHashFragment);
1316
-
1317
- if (bOpenedViaNWBC === true) {
1318
- oResolvedHashFragment.sFixedShellHash = sFixedShellHash;
1319
- this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
1320
- Log.info("NWBC application was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
1321
- });
1322
- if (oDashboard) {
1323
- oDashboard.setBlocked(false);
1324
- oDashboard.setBusy(false);
1325
- }
1326
-
1327
- return true;
1328
- }
1329
-
1330
- const bNewWindowNavigation = oResolvedHashFragment?.navigationMode === oNavigationMode.newWindow;
1331
- if (bNewWindowNavigation) {
1332
- // add the app to application usage log
1333
- oResolvedHashFragment.sFixedShellHash = sFixedShellHash;
1334
- this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
1335
- Log.info("Application in new window was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
1336
- });
1337
- const [ApplicationContainer] = await ushellUtils.requireAsync(["sap/ushell/components/container/ApplicationContainer"]);
1338
-
1339
- oResolvedHashFragment.url = ApplicationContainer.prototype._checkNwbcUrlAdjustment(undefined, oResolvedHashFragment.applicationType, oResolvedHashFragment.url, true);
1340
- this._openAppInNewWindowAndRestore(oResolvedHashFragment);
1341
- if (oDashboard) {
1342
- oDashboard.setBlocked(false);
1343
- oDashboard.setBusy(false);
1344
- }
1345
-
1346
- return true;
1347
- }
1348
-
1349
- // Close dialogs only for inplace navigation
1350
- if (InstanceManager && closeAllDialogs) {
1351
- InstanceManager.closeAllDialogs();
1352
- InstanceManager.closeAllPopovers();
1353
- }
1354
- closeAllDialogs = true;
1355
-
1303
+ _rewriteRootIntentForMigrationConfig: function (oResolvedHashFragment, sShellHash) {
1356
1304
  // In case of empty hash, if there is a resolved target, set the flag to false, from now on the rootIntent
1357
1305
  // will be an empty hash. Otherwise, change hash to rootIntent to trigger normal resolution.
1358
1306
  if (Config.last("/core/shell/model/migrationConfig")) {
1359
1307
  oConfig.migrationConfig = false;
1360
1308
  this._getConfigModel().setProperty("/migrationConfig", false);
1361
1309
 
1362
- if (oResolvedHashFragment && sFixedShellHash === "#") {
1310
+ if (oResolvedHashFragment && sShellHash === "#") {
1363
1311
  oConfig.rootIntent = "";
1364
- } else if (sFixedShellHash === "#") {
1312
+ } else if (sShellHash === "#") {
1365
1313
  window.setTimeout(() => {
1366
1314
  window.hasher.setHash(oConfig.rootIntent);
1367
1315
  }, 0);
@@ -1369,39 +1317,35 @@ sap.ui.define([
1369
1317
  return true;
1370
1318
  }
1371
1319
  }
1372
-
1373
1320
  return false;
1374
1321
  },
1375
1322
 
1376
- _initiateApplication: async function (oResolvedHashFragment, sFixedShellHash, oParsedShellHash, iOriginalHistoryLength, sAppPart, sOldFixedShellHash) {
1377
- Measurement.start("FLP:ShellController._initiateApplication", "_initiateApplication", "FLP");
1323
+ _openAppExplace: async function (oResolvedHashFragment, oOldResolvedHashFragment) {
1324
+ const [ApplicationContainer] = await ushellUtils.requireAsync(["sap/ushell/components/container/ApplicationContainer"]);
1378
1325
 
1379
- const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
1380
- const bContactSupportEnabled = Config.last("/core/extension/SupportTicket");
1381
- let bPreviousIsInitialNavigation;
1326
+ oResolvedHashFragment.url = ApplicationContainer.prototype._checkNwbcUrlAdjustment(undefined, oResolvedHashFragment.applicationType, oResolvedHashFragment.url, true);
1382
1327
 
1383
- // the activation of user activity logging must be done after the app component is fully loaded
1384
- // otherwise the module loading sequence causes race conditions on firefox
1385
- if (bContactSupportEnabled) {
1386
- window.setTimeout(() => {
1387
- sap.ui.require(["sap/ushell/UserActivityLog"], (UserActivityLog) => {
1388
- UserActivityLog.activate();
1389
- });
1390
- }, 0);
1328
+ EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
1329
+
1330
+ const oNewWin = WindowUtils.openURL(oResolvedHashFragment.url);
1331
+ // Show a message when window.open returns null --> Popup Blocker
1332
+ // Exception: in WorkZone's mobile client, when external nav happens: Keep calm and carry on.
1333
+ if (!oNewWin && !this._checkWindowLocationSearch("workzone-mobile-app=true")) {
1334
+ const msg = ushellResources.i18n.getText("fail_to_start_app_popup_blocker", [window.location.hostname]);
1335
+ this.delayedMessageError(msg);
1391
1336
  }
1392
1337
 
1393
- try {
1394
- bPreviousIsInitialNavigation = this.oShellNavigationInternal.isInitialNavigation();
1395
- this.navigate(oParsedShellHash, sFixedShellHash, oMetadata, oResolvedHashFragment, sOldFixedShellHash);
1396
- } catch (oExc) {
1397
- if (oExc.stack) {
1398
- Log.error(`Application initialization for intent "${sFixedShellHash}" failed.`, oExc);
1399
- }
1400
- this.oShellNavigationInternal.setIsInitialNavigation(bPreviousIsInitialNavigation);
1401
- await this.hashChangeFailure(iOriginalHistoryLength, oExc.name, oExc.message, oMetadata ? oMetadata.title : "", false);
1338
+ EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1339
+ this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment, oOldResolvedHashFragment);
1340
+ },
1341
+
1342
+ _closeAllDialogs: function () {
1343
+ if (InstanceManager && closeAllDialogs) {
1344
+ InstanceManager.closeAllDialogs();
1345
+ InstanceManager.closeAllPopovers();
1402
1346
  }
1403
1347
 
1404
- Measurement.end("FLP:ShellController._initiateApplication");
1348
+ closeAllDialogs = true;
1405
1349
  },
1406
1350
 
1407
1351
  /**
@@ -1414,37 +1358,68 @@ sap.ui.define([
1414
1358
  * <b>and</b> core-ext-light were loaded earlier. The promise is rejected with an error message in case errors occur.
1415
1359
  */
1416
1360
  _resolveHashFragment: async function (sShellHash) {
1417
- //Performance Debug
1418
- Measurement.start("FLP:ShellController._resolveHashFragment", "_resolveHashFragment", "FLP");
1419
- const oParsedShellHash = this.oURLParsing.parseShellHash(sShellHash) || {}; // might be empty in tests
1361
+ const oParsedShellHash = UrlParsing.parseShellHash(sShellHash) || {}; // might be empty in tests
1420
1362
  const oConfig = this._getConfig(); // for testing
1363
+ let oResolvedHashFragment;
1421
1364
 
1422
1365
  // Check and use resolved hash fragment from direct start promise if it's there
1423
1366
  if (window["sap-ushell-async-libs-promise-directstart"]) {
1424
1367
  try {
1425
1368
  const oDirectstartPromiseResult = await window["sap-ushell-async-libs-promise-directstart"];
1426
1369
  delete window["sap-ushell-async-libs-promise-directstart"];
1427
- return {
1428
- resolvedHashFragment: oDirectstartPromiseResult.resolvedHashFragment,
1429
- parsedShellHash: oParsedShellHash
1430
- };
1370
+
1371
+ oResolvedHashFragment = oDirectstartPromiseResult.resolvedHashFragment;
1431
1372
  } catch (oError) {
1432
1373
  delete window["sap-ushell-async-libs-promise-directstart"];
1433
1374
  throw oError;
1434
1375
  }
1376
+ } else {
1377
+ // Perform target resolution as normal...
1378
+ const NavTargetResolutionInternal = await Container.getServiceAsync("NavTargetResolutionInternal");
1379
+ oResolvedHashFragment = await ushellUtils.promisify(NavTargetResolutionInternal.resolveHashFragment(sShellHash));
1380
+ }
1381
+
1382
+ // Only for testing: return without result if the NavTargetResolutionInternal resolved nothing
1383
+ if (!oResolvedHashFragment && window.QUnit !== undefined && !window._bTestNullNavigationMode) {
1384
+ return;
1385
+ }
1386
+
1387
+ if (!oResolvedHashFragment) {
1388
+ // indicate that resolving failed
1389
+ oResolvedHashFragment = {
1390
+ navigationMode: null
1391
+ };
1435
1392
  }
1436
1393
 
1437
- // Perform target resolution as normal...
1438
- const NavTargetResolutionInternal = await Container.getServiceAsync("NavTargetResolutionInternal");
1439
- const oResolvedHashFragment = await ushellUtils.promisify(NavTargetResolutionInternal.resolveHashFragment(sShellHash)) || {}; // might be empty in tests
1440
- //@FIXME: Should be also executed for directstart
1441
1394
  AppConfiguration.setCurrentApplication(oResolvedHashFragment);
1395
+
1396
+ // add application config to the application properties
1397
+ const sBasicHash = UrlParsing.getBasicHash(sShellHash);
1398
+ if (oConfig?.applications?.[sBasicHash]) {
1399
+ oResolvedHashFragment.applicationConfiguration = oConfig.applications[sBasicHash];
1400
+ }
1401
+
1402
+ // adding intent as this published application info is required for the contact-support scenario
1403
+ oResolvedHashFragment.sFixedShellHash = sShellHash;
1404
+
1442
1405
  // Override navigation mode for root intent.
1443
1406
  // Shell home should be opened in embedded mode to allow a new window to be opened from GUI applications.
1444
- if (oParsedShellHash && (`${oParsedShellHash.semanticObject}-${oParsedShellHash.action}`) === oConfig.rootIntent) {
1445
- oResolvedHashFragment.navigationMode = "embedded";
1407
+ if (`${oParsedShellHash.semanticObject}-${oParsedShellHash.action}` === oConfig.rootIntent) {
1408
+ oResolvedHashFragment.navigationMode = NavigationMode.embedded;
1409
+ }
1410
+
1411
+ // todo: [FLPCOREANDUX-10024] move any navigationMode logic to sap/ushell/navigationMode
1412
+ if (oResolvedHashFragment.navigationMode !== null && !oResolvedHashFragment.navigationMode) {
1413
+ Log.error(
1414
+ "Mandatory member 'navigationMode' is missing in the resolution result! Temporarily set to 'embedded' for further processing...",
1415
+ "sap.ushell.renderer.Shell.controller"
1416
+ );
1417
+ oResolvedHashFragment.navigationMode = NavigationMode.embedded;
1446
1418
  }
1447
- Measurement.end("FLP:ShellController._resolveHashFragment");
1419
+
1420
+ // override the navigation mode based on the current state of the Shell and application
1421
+ this._setEffectiveNavigationMode(oResolvedHashFragment);
1422
+
1448
1423
  ushellUtils.setPerformanceMark("FLP-ShellController-resolveHashFragment-end");
1449
1424
 
1450
1425
  return {
@@ -1455,24 +1430,19 @@ sap.ui.define([
1455
1430
 
1456
1431
  /**
1457
1432
  * Adjust Navigation mode based on current state of the Shell and application and the ResolveHashFragment bo be started
1458
- *
1459
- * This operation mutates oResolvedHashFragment
1460
- *
1461
- * {@link #navigate}.
1433
+ * This operation mutates oResolvedHashFragment {@link #navigate}.
1462
1434
  *
1463
1435
  * @param {object} oResolvedHashFragment the hash fragment resolved via {@link sap.ushell.services.NavTargetResolutionInternal#resolveHashFragment}
1464
- * @returns {object} a new, potentially altered resolution result. Note that url and navigation mode may have been changed!
1465
- * For navigation in new window, the URL is replaced with the current location hash.
1466
- * NOTE: refactor this; we should not have these implicit changes of the navigation target
1436
+ *
1467
1437
  * @private
1468
1438
  */
1469
- _calculateNavigationMode: function (oResolvedHashFragment) {
1439
+ _setEffectiveNavigationMode: function (oResolvedHashFragment) {
1470
1440
  if (!oResolvedHashFragment) {
1471
1441
  return; // happens in tests
1472
1442
  }
1473
1443
  const sNavigationMode = oResolvedHashFragment.navigationMode;
1474
1444
 
1475
- if (sNavigationMode === oNavigationMode.newWindowThenEmbedded) {
1445
+ if (sNavigationMode === NavigationMode.newWindowThenEmbedded) {
1476
1446
  // Implement newWindowThenEmbedded based on current state.
1477
1447
  if (ushellUtils.isColdStart() || Ui5History.getInstance().getDirection() === Ui5HistoryDirection.Backwards) {
1478
1448
  /*
@@ -1482,9 +1452,9 @@ sap.ui.define([
1482
1452
  * Ui5History.getInstance().getDirection()
1483
1453
  * -> URL has already been navigated to and it was the predecessor of the previous page
1484
1454
  */
1485
- oResolvedHashFragment.navigationMode = oNavigationMode.embedded;
1455
+ oResolvedHashFragment.navigationMode = NavigationMode.embedded;
1486
1456
  } else {
1487
- oResolvedHashFragment.navigationMode = oNavigationMode.newWindow;
1457
+ oResolvedHashFragment.navigationMode = NavigationMode.newWindow;
1488
1458
  // if its a non-native navigation, we resolve the hash again in the new window
1489
1459
  // we set the full current location hash as URL for the new window as it is
1490
1460
  // for avoiding encoding issues and stripping off parameters or inner-app route
@@ -1493,27 +1463,26 @@ sap.ui.define([
1493
1463
  oResolvedHashFragment.url = this._getCurrentLocationHash();
1494
1464
  }
1495
1465
  }
1496
- return oResolvedHashFragment;
1466
+ return;
1497
1467
  }
1498
1468
 
1499
- if (sNavigationMode === oNavigationMode.newWindow && ushellUtils.isColdStart()) {
1469
+ if (sNavigationMode === NavigationMode.newWindow && ushellUtils.isColdStart()) {
1500
1470
  // Workaround for URLs that start an FLP app which needs the shell.
1501
1471
  if (this._hasAppCapabilitiesNavigationMode(oResolvedHashFragment)
1502
- && oResolvedHashFragment.appCapabilities.navigationMode === oNavigationMode.embedded) {
1503
- oResolvedHashFragment.navigationMode = oNavigationMode.embedded;
1472
+ && oResolvedHashFragment.appCapabilities.navigationMode === NavigationMode.embedded) {
1473
+ oResolvedHashFragment.navigationMode = NavigationMode.embedded;
1504
1474
  return oResolvedHashFragment;
1505
1475
  }
1506
1476
  // Replace the content of the current window if the user has already opened one.
1507
- oResolvedHashFragment.navigationMode = oNavigationMode.replace;
1508
- return oResolvedHashFragment;
1477
+ oResolvedHashFragment.navigationMode = NavigationMode.replace;
1478
+ return;
1509
1479
  }
1510
1480
 
1511
- if (sNavigationMode === oNavigationMode.newWindow
1481
+ if (sNavigationMode === NavigationMode.newWindow
1512
1482
  && this._hasAppCapabilitiesNavigationMode(oResolvedHashFragment)
1513
- && oResolvedHashFragment.appCapabilities.navigationMode === oNavigationMode.embedded) {
1483
+ && oResolvedHashFragment.appCapabilities.navigationMode === NavigationMode.embedded) {
1514
1484
  oResolvedHashFragment.url = this._getCurrentLocationHash();
1515
1485
  }
1516
- return oResolvedHashFragment;
1517
1486
  },
1518
1487
 
1519
1488
  // Workaround for URLs that start an FLP app which needs the shell.
@@ -1523,106 +1492,137 @@ sap.ui.define([
1523
1492
 
1524
1493
  _usesNavigationRedirect: async function (oComponentHandle) {
1525
1494
  if (!oComponentHandle) {
1526
- throw new Error("Missing component handle");
1495
+ return false;
1527
1496
  }
1528
1497
 
1529
1498
  const oComponent = oComponentHandle.getInstance({});
1530
1499
  if (!oComponent) {
1531
- throw new Error("Component instance not available");
1500
+ return false;
1532
1501
  }
1533
1502
 
1534
1503
  if (typeof oComponent.navigationRedirect !== "function") {
1535
- throw new Error("Component does not support navigation redirect");
1504
+ return false;
1536
1505
  }
1537
1506
 
1538
1507
  // oComponent refers to a trampoline application
1539
1508
  const oNavRedirectThenable = oComponent.navigationRedirect();
1540
1509
  if (!oNavRedirectThenable || typeof oNavRedirectThenable.then !== "function") {
1541
- throw new Error("Navigation redirect did not return a thenable");
1510
+ return false;
1542
1511
  }
1543
1512
 
1544
- const sNextHash = await ushellUtils.promisify(oNavRedirectThenable);
1545
- Log.warning(`Performing navigation redirect to hash "${sNextHash}"`);
1513
+ try {
1514
+ const sNextHash = await ushellUtils.promisify(oNavRedirectThenable);
1515
+ Log.warning(`Performing navigation redirect to hash "${sNextHash}"`);
1546
1516
 
1547
- oComponent.destroy();
1548
- this.history.pop();
1517
+ oComponent.destroy();
1518
+ this.history.pop();
1519
+
1520
+ const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
1521
+ ShellNavigationInternal.toExternal({ target: { shellHash: sNextHash } }, undefined, false);
1522
+
1523
+ return true;
1524
+ } catch {
1525
+ return false;
1526
+ }
1549
1527
 
1550
- const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
1551
- ShellNavigationInternal.toExternal({ target: { shellHash: sNextHash } }, undefined, false);
1552
- return true;
1553
1528
  },
1554
1529
 
1555
1530
  /**
1556
1531
  * Performs navigation based on the given resolved hash fragment.
1557
1532
  *
1558
1533
  * @param {object} oParsedShellHash the parsed shell hash obtained via {@link sap.ushell.services.URLParsing} service
1559
- * @param {string} sFixedShellHash the hash fragment to navigate to. It must start with "#" (i.e., fixed).
1560
- * @param {object} oMetadata the metadata object obtained via {@link sap.ushell.services.AppConfiguration#parseShellHash}
1534
+ * @param {string} sShellHash the hash fragment to navigate to. It must start with "#" (i.e., fixed).
1561
1535
  * @param {object} oResolvedHashFragment the hash fragment resolved via {@link sap.ushell.services.NavTargetResolutionInternal#resolveHashFragment}
1536
+ * @param {string} sOldShellHash the old hash fragment. It must start with "#" (i.e., fixed).
1537
+ * @param {string} sAppPart the application part
1562
1538
  *
1563
1539
  * @returns {Promise} Navigation Promise
1564
1540
  */
1565
- navigate: async function (oParsedShellHash, sFixedShellHash, oMetadata, oResolvedHashFragment, sOldFixedShellHash) {
1566
- //Performance Debug
1567
- Measurement.start("FLP:ShellController.navigate", "navigate", "FLP");
1568
- let sNavigationMode = (isPlainObject(oResolvedHashFragment) ? oResolvedHashFragment.navigationMode : null);
1541
+ _openAppInplace: async function (oParsedShellHash, sShellHash, oResolvedHashFragment, sOldShellHash, sAppPart, oOldResolvedHashFragment) {
1542
+ // todo: [FLPCOREANDUX-10024] check the parameters sent to the AI methods
1569
1543
 
1570
- /*
1571
- * A null navigationMode is a no-op, it indicates no navigation should occur.
1572
- * However, we need to restore the current hash to the previous one.
1573
- * If cold start happened (history has only one entry), we go to the shell home.
1574
- */
1575
- if (sNavigationMode === null) {
1576
- if (ushellUtils.isColdStart()) {
1577
- window.hasher.setHash("");
1578
- return;
1579
- }
1544
+ const bNavigationFromHome = this._isFLPIntent(sOldShellHash);
1545
+ const bNavigationWithInnerAppRoute = !!sAppPart;
1580
1546
 
1581
- this.bEnableHashChange = false;
1582
- this.history.pop();
1583
- this._windowHistoryBack(1);
1584
- return;
1585
- }
1547
+ // Close dialogs only for inplace navigation
1548
+ this._closeAllDialogs();
1586
1549
 
1587
- oResolvedHashFragment = this._calculateNavigationMode(oResolvedHashFragment);
1588
- sNavigationMode = (isPlainObject(oResolvedHashFragment) ? oResolvedHashFragment.navigationMode : null);
1550
+ await AppLifeCycleAI.handleBeforeCreateApp(sShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute);
1589
1551
 
1590
- if (!sNavigationMode) {
1591
- Log.error(
1592
- "Mandatory member 'navigationMode' is missing in the resolution result! Temporarily set to 'embedded' for further processing...",
1593
- "sap.ushell.renderer.Shell.controller"
1594
- );
1595
- sNavigationMode = "embedded";
1552
+ // Enhances the resolved hash fragment with the componentHandle for UI5 apps
1553
+ await AppLifeCycleAI.handleCreateApp(sShellHash, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute);
1554
+
1555
+ // todo: [FLPCOREANDUX-10024] Validate the issue
1556
+ // the activation of user activity logging must be done after the app component is fully loaded
1557
+ // otherwise the module loading sequence causes race conditions on firefox
1558
+ const bContactSupportEnabled = Config.last("/core/extension/SupportTicket");
1559
+ if (bContactSupportEnabled) {
1560
+ ushellUtils.awaitTimeout(0)
1561
+ .then(() => {
1562
+ return ushellUtils.requireAsync("sap/ushell/UserActivityLog");
1563
+ })
1564
+ .then(([UserActivityLog]) => {
1565
+ UserActivityLog.activate();
1566
+ });
1596
1567
  }
1597
1568
 
1598
- if (sNavigationMode === oNavigationMode.embedded) {
1599
- if (!ushellUtils.isColdStart() && !this._wasHistoryEntryReplaced) {
1569
+ const sEffectiveNavigationMode = oResolvedHashFragment.navigationMode;
1570
+ if (sEffectiveNavigationMode === NavigationMode.embedded) {
1571
+ if (!ushellUtils.isColdStart() && !this._bWasHistoryEntryReplaced) {
1600
1572
  this.oShellNavigationInternal.setIsInitialNavigation(false);
1601
1573
  }
1602
1574
 
1603
- Measurement.end("FLP:ShellController.navigate");
1575
+ // The trampoline application subsequently gets destroyed after it's used to enable the redirection.
1576
+ const bHandledByNavigationRedirect = await this._usesNavigationRedirect(oResolvedHashFragment.componentHandle);
1577
+ if (bHandledByNavigationRedirect) {
1578
+ // todo: [FLPCOREANDUX-10024] check cleanup stuff (StateManager, ...)
1579
+ return;
1580
+ }
1604
1581
 
1605
- try {
1606
- await this._usesNavigationRedirect(oResolvedHashFragment.componentHandle);
1607
- /*
1608
- * When `_usesNavigationRedirect` succeeds, it implies the component references a trampoline application.
1609
- * The trampoline application subsequently gets destroyed after it's used to enable the redirection.
1610
- * The failure is being used here as a means for branching in the execution flow.
1611
- */
1612
- } catch {
1613
- await this._handleEmbeddedNavMode(sFixedShellHash, oParsedShellHash, oMetadata, oResolvedHashFragment, sOldFixedShellHash);
1582
+ AppLifeCycleAI.resetGlobalShellUIService();
1614
1583
 
1615
- /*
1616
- * The event is used for FESR records
1617
- * Normally FESR record is closed on the "AppRendered" event, but for some cases (stateful container, etc.)
1618
- * the application container is not re-rendered and EmbeddedNavigationDone is additionally fired to close the record.
1619
- */
1620
- EventHub.emit("CloseFesrRecord", { time: Date.now(), technicalName: oMetadata.technicalName });
1621
- }
1584
+ const oShellConfig = this._getConfig();
1585
+ const sBasicShellHash = UrlParsing.getBasicHash(sShellHash);
1586
+
1587
+ await AppLifeCycleAI.handleCreateApplicationContainer(
1588
+ sBasicShellHash, // sAppId
1589
+ oParsedShellHash,
1590
+ oResolvedHashFragment,
1591
+ sOldShellHash
1592
+ );
1593
+
1594
+ // todo: [FLPCOREANDUX-10024] TBD
1595
+ AppLifeCycleAI.navToCurrentApp(); // todo: [FLPCOREANDUX-10024] triggers appLoaded event
1596
+
1597
+ // @Alon Barnes: Is this call even needed? The beforehand given oMetadata has not included the accessed property in the AppMeta.js
1598
+ // So, maybe this call can even be removed?
1599
+ AppMeta.setAppIcons();
1600
+
1601
+ // todo: [FLPCOREANDUX-10024] should this be done after handleControl?
1602
+ // this only targets the overwritten rootIntent (e.g. workzone advanced)
1603
+ const bIsNavToHome = sShellHash === "#" || (oShellConfig.rootIntent && sBasicShellHash === UrlParsing.getBasicHash(oShellConfig.rootIntent));
1604
+ AppLifeCycleAI.switchViewState(
1605
+ bIsNavToHome ? LaunchpadState.Home : LaunchpadState.App,
1606
+ sBasicShellHash, // sAppId
1607
+ oResolvedHashFragment.applicationType,
1608
+ oResolvedHashFragment.explicitNavMode
1609
+ );
1610
+
1611
+ // todo: [FLPCOREANDUX-10024] check whether this needs to be awaited
1612
+ await AppLifeCycleAI.handleAfterNavigate(oResolvedHashFragment, oOldResolvedHashFragment);
1613
+
1614
+ /*
1615
+ * The event is used for FESR records
1616
+ * Normally FESR record is closed on the "AppRendered" event, but for some cases (stateful container, etc.)
1617
+ * the application container is not re-rendered and EmbeddedNavigationDone is additionally fired to close the record.
1618
+ */
1619
+ const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
1620
+ EventHub.emit("CloseFesrRecord", { time: Date.now(), technicalName: oMetadata.technicalName });
1622
1621
  return;
1623
1622
  }
1624
1623
 
1625
- if (sNavigationMode === oNavigationMode.replace) {
1624
+ // todo: [FLPCOREANDUX-10024] clarify whether there is an actual use case of replace navigation which requires the steps above
1625
+ if (sEffectiveNavigationMode === NavigationMode.replace) {
1626
1626
  this.oShellNavigationInternal.setIsInitialNavigation(false);
1627
1627
  // restore hash
1628
1628
  this.bEnableHashChange = false;
@@ -1630,14 +1630,15 @@ sap.ui.define([
1630
1630
  return;
1631
1631
  }
1632
1632
 
1633
- if (sNavigationMode === oNavigationMode.newWindow) {
1634
- this._openAppInNewWindowAndRestore(oResolvedHashFragment);
1635
- return;
1636
- }
1637
-
1638
1633
  // the navigation mode doesn't match any valid one.
1639
1634
  // In this case an error message is logged and previous hash is fetched
1640
- await this.hashChangeFailure(this.history.getHistoryLength(), "Navigation mode is not recognized", null, "sap.ushell.renderer.Shell.controller", false);
1635
+ await this.hashChangeFailure(
1636
+ this.history.getHistoryLength(),
1637
+ `Navigation mode '${sEffectiveNavigationMode}' was not recognized`,
1638
+ null,
1639
+ "sap.ushell.renderer.Shell.controller",
1640
+ false
1641
+ );
1641
1642
  },
1642
1643
 
1643
1644
  /**
@@ -1648,7 +1649,7 @@ sap.ui.define([
1648
1649
  *
1649
1650
  * @private
1650
1651
  */
1651
- _openAppViaNWBC: async function (oResolvedHashFragment) {
1652
+ _openAppViaNWBC: async function (oResolvedHashFragment, oOldResolvedHashFragment) {
1652
1653
  const bNwbcHandling = oResolvedHashFragment && (ushellUtils.isNativeWebGuiNavigation(oResolvedHashFragment) || oResolvedHashFragment.nativeNWBCNavigation);
1653
1654
 
1654
1655
  if (!bNwbcHandling) {
@@ -1660,7 +1661,7 @@ sap.ui.define([
1660
1661
 
1661
1662
  let iMode;
1662
1663
  if (ushellUtils.hasNavigationModeCapability()) {
1663
- iMode = iEPCMNavigationMode || oEPCMNavigationMode[oNavigationMode.embedded];
1664
+ iMode = iEPCMNavigationMode || oEPCMNavigationMode[NavigationMode.embedded];
1664
1665
  }
1665
1666
 
1666
1667
  const sUrlWithSapUser = await this._appendUserIdToUrl("sap-user", oResolvedHashFragment.url);
@@ -1704,7 +1705,7 @@ sap.ui.define([
1704
1705
  }
1705
1706
  EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1706
1707
 
1707
- await this._restoreAfterNwbcNavigation(oResolvedHashFragment);
1708
+ await this._restoreAfterNwbcNavigation(oResolvedHashFragment, oOldResolvedHashFragment);
1708
1709
  /*
1709
1710
  * TODO: This is a workaround.
1710
1711
  * We should rather update the resolvedHashFragment before the navigation happens. Other Components listening
@@ -1739,7 +1740,7 @@ sap.ui.define([
1739
1740
  * @returns {Promise} A Promise resolving when the hash is restored.
1740
1741
  * @private
1741
1742
  */
1742
- _restoreAfterNwbcNavigation: async function (oResolvedHashFragment) {
1743
+ _restoreAfterNwbcNavigation: async function (oResolvedHashFragment, oOldResolvedHashFragment) {
1743
1744
  if (this.history.getHistoryLength() === 1 && !this._oAppLifeCycleService.getCurrentApplication()) {
1744
1745
  // Deep link case
1745
1746
  const Navigation = await Container.getServiceAsync("Navigation");
@@ -1748,7 +1749,7 @@ sap.ui.define([
1748
1749
  }
1749
1750
 
1750
1751
  // Regular case
1751
- this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment);
1752
+ this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment, oOldResolvedHashFragment);
1752
1753
  },
1753
1754
 
1754
1755
  /**
@@ -1773,7 +1774,7 @@ sap.ui.define([
1773
1774
  * The method restore the previous hash when app is opened in the new tab
1774
1775
  * @param {*} oResolvedHashFragment resolved hash fragment
1775
1776
  */
1776
- _restorePreviousHashAfterOpenNewWindow: function (oResolvedHashFragment) {
1777
+ _restorePreviousHashAfterOpenNewWindow: function (oResolvedHashFragment, oOldResolvedHashFragment) {
1777
1778
  this.history.pop();
1778
1779
  const oVarInstance = oResolvedHashFragment.componentHandle && oResolvedHashFragment.componentHandle.getInstance
1779
1780
  && oResolvedHashFragment.componentHandle.getInstance({});
@@ -1785,178 +1786,14 @@ sap.ui.define([
1785
1786
  this._windowHistoryBack(1);
1786
1787
 
1787
1788
  // set back the current application to be the one before this navigation occurred as current application is opened in a new window
1788
- AppConfiguration.setCurrentApplication(this.currentAppBeforeNav);
1789
+ AppConfiguration.setCurrentApplication(oOldResolvedHashFragment);
1789
1790
  EventHub.emit("openedAppInNewWindow", Date.now());
1790
1791
  },
1791
1792
 
1792
- _openAppInNewWindowAndRestore: function (oResolvedHashFragment) {
1793
- EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
1794
- this._openAppNewWindow(oResolvedHashFragment.url);
1795
- EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1796
- this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment);
1797
- },
1798
-
1799
- _handleEmbeddedNavMode: async function (sFixedShellHash, oParsedShellHash, oMetadata, oResolvedHashFragment, sOldFixedShellHash) {
1800
- // Performance Debug
1801
- Measurement.start("FLP:ShellController._handleEmbeddedNavMode", "_handleEmbeddedNavMode", "FLP");
1802
- const oConfig = this._getConfig();
1803
-
1804
- AppLifeCycleAI.getShellUIService()?.resetService?.();
1805
- AppLifeCycleAI.setBackNavigationChanged(false);
1806
-
1807
- // @Alon Barnes: Is this call even needed? The beforehand given oMetadata has not included the accessed property in the AppMeta.js
1808
- // So, maybe this call can even be removed?
1809
- AppMeta.setAppIcons();
1810
-
1811
- // obtain a unique id for the app (or the component)
1812
- const sAppId = `-${oParsedShellHash.semanticObject}-${oParsedShellHash.action}`;
1813
-
1814
- const bIsNavToHome = sFixedShellHash === "#" ||
1815
- (oConfig.rootIntent && ushellUtils.getBasicHash(oConfig.rootIntent) === `${oParsedShellHash.semanticObject}-${oParsedShellHash.action}`);
1816
-
1817
- // Support migration from version 1.28 or lower in case local resolution for empty hash was used
1818
- const sIntent = oParsedShellHash ? `${oParsedShellHash.semanticObject}-${oParsedShellHash.action}` : "";
1819
-
1820
- AppLifeCycleAI.switchViewState(
1821
- bIsNavToHome ? LaunchpadState.Home : LaunchpadState.App,
1822
- sAppId,
1823
- oResolvedHashFragment.applicationType,
1824
- oResolvedHashFragment.explicitNavMode
1825
- );
1826
-
1827
- if (bIsNavToHome) {
1828
- AppLifeCycleAI.getShellUIService().setBackNavigation();
1829
- }
1830
-
1831
- // adding intent as this published application info is required for the contact-support scenario
1832
- oResolvedHashFragment.sFixedShellHash = sFixedShellHash;
1833
-
1834
- const oHandleControlPromise = AppLifeCycleAI.handleControl(
1835
- sIntent,
1836
- sAppId,
1837
- oParsedShellHash,
1838
- oResolvedHashFragment,
1839
- this.getWrappedApplicationWithMoreStrictnessInIntention.bind(this),
1840
- sFixedShellHash,
1841
- sOldFixedShellHash
1842
- );
1843
-
1844
- if (this.currentAppBeforeNav) {
1845
- // todo: [FLPCOREANDUX-10024] check whether this needs to be awaited
1846
- if (ushellUtils.isTRApplicationType(this.currentAppBeforeNav.applicationType, ObjectPath.get("appCapabilities.appFrameworkId", this.currentAppBeforeNav)) &&
1847
- !ushellUtils.isTRApplicationType(oResolvedHashFragment.applicationType)) {
1848
- sap.ui.require([
1849
- "sap/ushell/components/applicationIntegration/application/BlueBoxHandler",
1850
- "sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler"
1851
- ], (
1852
- BlueBoxHandler,
1853
- WebGUIStatefulHandler
1854
- ) => {
1855
- const oPreviousStatefulContainer = BlueBoxHandler.getBlueBoxByUrl(this.currentAppBeforeNav.url);
1856
- if (oPreviousStatefulContainer && oPreviousStatefulContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
1857
- WebGUIStatefulHandler.guiStatefulCloseCurrentApp(oPreviousStatefulContainer);
1858
- }
1859
- });
1860
- }
1861
- }
1862
-
1863
- Measurement.end("FLP:ShellController._handleEmbeddedNavMode");
1864
-
1865
- await oHandleControlPromise;
1866
- },
1867
-
1868
1793
  _isShellHomeIntent: function (sIntent) {
1869
1794
  return sIntent === "#" || sIntent === oConfig.rootIntent;
1870
1795
  },
1871
1796
 
1872
- // Please help improve the strictness of this method.
1873
- getWrappedApplicationWithMoreStrictnessInIntention: function (sIntent, oMetadata, oShellHash, oResolvedNavigationTarget, sAppId, bFullWidth, sFixedShellHash) {
1874
- if (Device.system.desktop) {
1875
- sap.ui.require(["sap/ushell/renderer/AccessKeysHandler"], (AccessKeysHandler) => {
1876
- const sCurrentLaunchpadState = StateManager.getLaunchpadState();
1877
- const bDefaultShellMode = StateManager.getShellMode() === ShellMode.Default;
1878
- const oShellAppTitle = Element.getElementById("shellAppTitle");
1879
-
1880
- if (oShellAppTitle && sCurrentLaunchpadState === LaunchpadState.App && bDefaultShellMode) {
1881
- const oShellAppTitleDomRef = oShellAppTitle.getFocusDomRef();
1882
- if (oShellAppTitleDomRef) {
1883
- AccessKeysHandler.sendFocusBackToShell(oShellAppTitleDomRef.getAttribute("id"));
1884
- }
1885
- }
1886
- });
1887
- }
1888
-
1889
- window.setTimeout(() => {
1890
- window.setTimeout(() => {
1891
- //Screen reader: "Loading Complete"
1892
- this.readNavigationEnd();
1893
- }, 600);
1894
-
1895
- EventBus.getInstance().publish("launchpad", "appOpening", oResolvedNavigationTarget);
1896
- Log.info("app is being opened");
1897
- }, 0);
1898
- if (oConfig.applications) {
1899
- oResolvedNavigationTarget.applicationConfiguration = oConfig.applications[sIntent];
1900
- }
1901
-
1902
- const oAppContainer = AppLifeCycleAI.getAppContainer(sAppId, oResolvedNavigationTarget, ushellUtils.isColdStart(), oShellHash, sFixedShellHash);
1903
- let bContainerFromCachePool = false;
1904
- if (oAppContainer.getIsFetchedFromCache && oAppContainer.getIsFetchedFromCache()) {
1905
- bContainerFromCachePool = true;
1906
- }
1907
-
1908
- if (!bContainerFromCachePool) {
1909
- AppLifeCycleAI.publishNavigationStateEvents(oAppContainer, oResolvedNavigationTarget, this.onAppAfterRendering.bind(this, oResolvedNavigationTarget));
1910
-
1911
- if (ushellUtils.isSAPLegacyApplicationType(oAppContainer.getApplicationType(), oAppContainer.getFrameworkId())) {
1912
- oAppContainer.addStyleClass("sapUShellApplicationContainerShiftedIframe");
1913
- }
1914
-
1915
- if (!bFullWidth) {
1916
- oAppContainer.addStyleClass("sapUShellApplicationContainerLimitedWidth");
1917
- }
1918
-
1919
- if (this._isFloatingContainerDocked() && window.matchMedia("(min-width: 106.4rem)").matches) {
1920
- oAppContainer.addStyleClass("sapUShellDockingContainer");
1921
- oAppContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1922
- } else if (this._isFloatingContainerDocked()) {
1923
- oAppContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1924
- }
1925
-
1926
- oAppContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
1927
-
1928
- AppMeta._applyContentDensityByPriority();
1929
-
1930
- // Add inner control for next request
1931
- AppLifeCycleAI.addControl(oAppContainer);
1932
- }
1933
-
1934
- ushellUtils.setPerformanceMark("FLP - addAppContainer");
1935
-
1936
- Measurement.end("FLP:ShellController.getWrappedApplication");
1937
- return oAppContainer;
1938
- },
1939
-
1940
- onAppAfterRendering: function (oApplication) {
1941
- // wrapped in setTimeout since "publish" is not async
1942
- window.setTimeout(() => {
1943
- EventBus.getInstance().publish("sap.ushell", "appOpened", oApplication);
1944
- Log.info("app was opened");
1945
- }, 0);
1946
-
1947
- // publish the event externally
1948
- // TODO: cloned, frozen object!
1949
- const oAppOpenedEventData = AppLifeCycleAI._publicEventDataFromResolutionResult(oApplication);
1950
-
1951
- // Event is emitted internally (EventHub) _and_ externally (for compatibility reasons)
1952
- EventHub.emit("AppRendered", oAppOpenedEventData, true);
1953
- RendererUtils.publishExternalEvent("appOpened", oAppOpenedEventData);
1954
- ushellUtils.setPerformanceMark("FLP.appOpened");
1955
-
1956
- const sIcon = AppMeta.getAppIcon();
1957
- StateManager.updateCurrentState("application.icon", Operation.Set, sIcon);
1958
- },
1959
-
1960
1797
  /**
1961
1798
  * Adds a listener to the "appComponentLoaded" Event that is published by the "sap.ushell".
1962
1799
  * Once the "home app" Component is saved, the listener is removed, and this function will not do anything.
@@ -1985,12 +1822,6 @@ sap.ui.define([
1985
1822
  * @returns {Promise} A promise resolving when the error message is shown.
1986
1823
  */
1987
1824
  hashChangeFailure: async function (iHistoryLength, vMessage, vDetails, sComponent, bEnableHashChange) {
1988
- const oDashboard = Element.getElementById("sapUshellDashboardPage");
1989
- if (oDashboard) {
1990
- oDashboard.setBlocked(false);
1991
- oDashboard.setBusy(false);
1992
- }
1993
-
1994
1825
  StateManager.discardStalledChanges();
1995
1826
 
1996
1827
  if (ushellUtils.isPlainObject(vMessage)) {
@@ -2041,25 +1872,6 @@ sap.ui.define([
2041
1872
  }
2042
1873
  },
2043
1874
 
2044
- fixShellHash: function (sShellHash) {
2045
- if (!sShellHash) {
2046
- sShellHash = "#";
2047
- } else if (sShellHash.charAt(0) !== "#") {
2048
- sShellHash = `#${sShellHash}`;
2049
- }
2050
- return sShellHash;
2051
- },
2052
-
2053
- _openAppNewWindow: function (sUrl) {
2054
- const oNewWin = WindowUtils.openURL(sUrl);
2055
- // Show a message when window.open returns null --> Popup Blocker
2056
- // Exception: in WorkZone's mobile client, when external nav happens: Keep calm and carry on.
2057
- if (!oNewWin && !this._checkWindowLocationSearch("workzone-mobile-app=true")) {
2058
- const msg = ushellResources.i18n.getText("fail_to_start_app_popup_blocker", [window.location.hostname]);
2059
- this.delayedMessageError(msg);
2060
- }
2061
- },
2062
-
2063
1875
  _checkWindowLocationSearch: function (sTerm) {
2064
1876
  return window.location.search.indexOf(sTerm) > -1;
2065
1877
  },
@@ -2159,15 +1971,14 @@ sap.ui.define([
2159
1971
  const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
2160
1972
  // If the app is kept alive in the background, the fixedShellHash is often not supplied.
2161
1973
  // In these cases, we then try to get the hash from the current location.
2162
- const sFixedShellHash = oResolvedHashFragment.sFixedShellHash || this._getCurrentLocationHash();
1974
+ const sShellHash = oResolvedHashFragment.sFixedShellHash || this._getCurrentLocationHash();
2163
1975
  const oRecentEntry = {
2164
1976
  title: oMetadata.title,
2165
1977
  appType: AppType.APP, // default app type the shell adds is 'Application'
2166
- url: sAppPart ? sFixedShellHash + sAppPart : sFixedShellHash
1978
+ url: sAppPart ? sShellHash + sAppPart : sShellHash
2167
1979
  };
2168
1980
 
2169
- const oURLParsingService = await Container.getServiceAsync("URLParsing");
2170
- const oParsed = oURLParsingService.parseShellHash(sFixedShellHash);
1981
+ const oParsed = UrlParsing.parseShellHash(sShellHash);
2171
1982
  if (oParsed) {
2172
1983
 
2173
1984
  // This is the key that determines whether an existing activity should be updated or added.
@@ -2181,16 +1992,16 @@ sap.ui.define([
2181
1992
 
2182
1993
  // Perhaps this could be further fixed by hashing a target mapping on the client before returning the resolution
2183
1994
  // result, and using the hash as the id.
2184
- oRecentEntry.appId = `#${oURLParsingService.constructShellHash({
1995
+ oRecentEntry.appId = `#${UrlParsing.constructShellHash({
2185
1996
  semanticObject: oParsed.semanticObject,
2186
1997
  action: oParsed.action
2187
1998
  })}`;
2188
1999
  } else {
2189
- oRecentEntry.appId = sFixedShellHash;
2000
+ oRecentEntry.appId = sShellHash;
2190
2001
  }
2191
2002
 
2192
2003
  // The recent activity for searches is done in a different way, see this._logSearchActivity
2193
- if (sFixedShellHash && sFixedShellHash.indexOf("#Action-search") === -1 && sFixedShellHash.indexOf("#Shell-startIntent") === -1) {
2004
+ if (sShellHash && sShellHash.indexOf("#Action-search") === -1 && sShellHash.indexOf("#Shell-startIntent") === -1) {
2194
2005
  await ushellUtils.awaitTimeout(1500);
2195
2006
  await this._logRecentActivity(oRecentEntry);
2196
2007
  return;
@@ -2207,12 +2018,11 @@ sap.ui.define([
2207
2018
  */
2208
2019
  _notifyUITracer: function (oResolvedHashFragment) {
2209
2020
  try {
2210
- let sApplicationId = oResolvedHashFragment.ui5ComponentName;
2211
- if (oResolvedHashFragment.reservedParameters) {
2212
- sApplicationId =
2213
- oResolvedHashFragment.reservedParameters["sap-fiori-id"] ||
2214
- oResolvedHashFragment.reservedParameters["sap-ui-app-id-hint"];
2215
- }
2021
+ const sApplicationId =
2022
+ oResolvedHashFragment.reservedParameters?.["sap-fiori-id"]?.[0] ||
2023
+ oResolvedHashFragment.reservedParameters?.["sap-ui-app-id-hint"]?.[0] ||
2024
+ oResolvedHashFragment.ui5ComponentName;
2025
+
2216
2026
  EventHub.emit("UITracer.trace", {
2217
2027
  reason: "NavigateApp",
2218
2028
  source: "Intent",
@@ -2252,19 +2062,6 @@ sap.ui.define([
2252
2062
  }
2253
2063
  },
2254
2064
 
2255
- readNavigationEnd: function () {
2256
- const oAccessibilityHelperLoadingComplete = document.getElementById("sapUshellLoadingAccessibilityHelper-loadingComplete");
2257
-
2258
- if (oAccessibilityHelperLoadingComplete) {
2259
- oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "polite");
2260
- oAccessibilityHelperLoadingComplete.innerHTML = ushellResources.i18n.getText("loadingComplete");
2261
- window.setTimeout(() => {
2262
- oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "off");
2263
- oAccessibilityHelperLoadingComplete.innerHTML = "";
2264
- }, 0);
2265
- }
2266
- },
2267
-
2268
2065
  _loadCoreExtNonUI5: function (oAppTarget) {
2269
2066
  if (oAppTarget && oAppTarget.applicationType !== "SAPUI5") {
2270
2067
  this._loadCoreExt();
@@ -2329,7 +2126,6 @@ sap.ui.define([
2329
2126
 
2330
2127
  // Triggers loading of CoreExt via EventHub
2331
2128
  _loadCoreExt: async function () {
2332
- Measurement.end("FLP:Container.InitLoading");
2333
2129
  // Trigger oEventHub.once("loadCoreResourcesComplement") in case homepage is first rendered.
2334
2130
  // Usually this is done with resolveHashFragment, but without passing from that path we should trigger it actively.
2335
2131
  await Container.getServiceAsync("Ui5ComponentLoader");
@@ -2490,7 +2286,7 @@ sap.ui.define([
2490
2286
  _navBack: function () {
2491
2287
  // set meAria as closed when navigating back
2492
2288
  this.setUserActionsMenuSelected(false);
2493
- AppLifeCycleAI.service().navigateBack();
2289
+ RelatedServices.navigateBack();
2494
2290
  },
2495
2291
 
2496
2292
  _updateUserPrefModel: function (entryObject, bGrouped) {
@@ -2586,10 +2382,16 @@ sap.ui.define([
2586
2382
  EventHub.emit("showNotifications", bSelected);
2587
2383
  },
2588
2384
 
2589
- _isFloatingContainerDocked: function () {
2590
- const bDocked = ShellModel.getModel().getProperty("/floatingContainer/state").includes("docked");
2591
- const bVisible = ShellModel.getModel().getProperty("/floatingContainer/visible");
2592
- return bDocked && bVisible;
2385
+ _isFLPIntent: function (sHash) {
2386
+ const sBasicHash = UrlParsing.getBasicHash(sHash);
2387
+ const aFLPIntents = [
2388
+ "Shell-home",
2389
+ "Shell-appfinder",
2390
+ "Launchpad-openFLPPage",
2391
+ "Launchpad-openWorkPage"
2392
+ ];
2393
+
2394
+ return aFLPIntents.some((sIntent) => sBasicHash === sIntent);
2593
2395
  }
2594
2396
  });
2595
2397
  });