From b4ac36dacfec32636eafe5fea6d2c9a12f76b93f Mon Sep 17 00:00:00 2001 From: Konrad Piascik Date: Thu, 9 Apr 2020 18:16:02 -0400 Subject: [PATCH 1/8] WIP on-screen error messages for Lumin --- src/react-magic-script/magic-script-renderer.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/react-magic-script/magic-script-renderer.js b/src/react-magic-script/magic-script-renderer.js index 4d1ef35..81b8f3c 100644 --- a/src/react-magic-script/magic-script-renderer.js +++ b/src/react-magic-script/magic-script-renderer.js @@ -36,7 +36,14 @@ const UPDATE_SIGNAL = {}; // hostContext: HostContext, // internalInstanceHandle: Object function createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) { - return mxs._nativeFactory.createElement(type, rootContainerInstance, props); + try { + var obj = mxs._nativeFactory.createElement(type, rootContainerInstance, props); + } catch (e) { + let message = `ERROR Type: ${type}\nproperties: ${JSON.stringify(props)}`; + console.error(`${message}\n${e.message}`); + obj = mxs._nativeFactory.createElement('text', rootContainerInstance, {textSize: 0.015, children: message}); + } + return obj; } // Function: This function is used to create separate text nodes if the target allows only creating text in separate text nodes From b66f8b1f50129fef7181c683aac3bcdf39c41ed0 Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Thu, 16 Apr 2020 22:22:57 -0400 Subject: [PATCH 2/8] Add SpatialLogger for rendering spatial log massages --- src/configuration.js | 2 ++ .../lumin-runtime/utilities/spatial-logger.js | 34 +++++++++++++++++++ .../magic-script-renderer.js | 14 ++++---- 3 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 src/platform/lumin-runtime/utilities/spatial-logger.js diff --git a/src/configuration.js b/src/configuration.js index 054e16b..4f230f7 100644 --- a/src/configuration.js +++ b/src/configuration.js @@ -3,9 +3,11 @@ import nativeComponentMapping from './platform/lumin-runtime/component-mapping.js'; import { PlatformFactory } from './platform/lumin-runtime/platform-factory.js'; import { MessageSeverity } from './util/logger.js'; +import SpatialLogger from './platform/lumin-runtime/utilities/spatial-logger.js'; export default { nativeMapping: nativeComponentMapping, nativeFactory: PlatformFactory, + spatialLogger: SpatialLogger, logMinMessageSeverity: MessageSeverity.error }; diff --git a/src/platform/lumin-runtime/utilities/spatial-logger.js b/src/platform/lumin-runtime/utilities/spatial-logger.js new file mode 100644 index 0000000..ce51804 --- /dev/null +++ b/src/platform/lumin-runtime/utilities/spatial-logger.js @@ -0,0 +1,34 @@ +import { ui } from 'lumin'; +import { logError } from './logger.js'; + +const { UiText, Alignment, HorizontalTextAlignment } = ui; +const COLOR_RED = [1, 0, 0, 1]; + +function _createTextNode (prism, message, color) { + const uiText = UiText.Create(prism, message); + + uiText.setAlignment(Alignment.CENTER_CENTER); + uiText.setTextAlignment(HorizontalTextAlignment.kCenter); + uiText.setColor(color); + + return uiText; +} + +export default class SpatialLogger { + setNativeApp (app) { + this._app = app; + } + + logErrorOnCreateElement (type, properties, container, error) { + const prism = container.controller.getPrism(); + const message = `Creating element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`; + + logError(message); + showSpatialMessage(prism, message, COLOR_RED); + } + + showSpatialMessage (prism, message, color) { + prism.getRoot().addChild(_createTextNode(prism, message, color)); + } +} + \ No newline at end of file diff --git a/src/react-magic-script/magic-script-renderer.js b/src/react-magic-script/magic-script-renderer.js index 23c704d..fe1bfc6 100644 --- a/src/react-magic-script/magic-script-renderer.js +++ b/src/react-magic-script/magic-script-renderer.js @@ -36,14 +36,16 @@ const UPDATE_SIGNAL = {}; // hostContext: HostContext, // internalInstanceHandle: Object function createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) { + let instance; try { - var obj = mxs._nativeFactory.createElement(type, rootContainerInstance, props); - } catch (e) { - let message = `ERROR Type: ${type}\nproperties: ${JSON.stringify(props)}`; - console.error(`${message}\n${e.message}`); - obj = mxs._nativeFactory.createElement('text', rootContainerInstance, {textSize: 0.015, children: message}); + instance = mxs._nativeFactory.createElement(type, rootContainerInstance, props); + } catch (error) { + // let message = `ERROR Type: ${type}\nproperties: ${JSON.stringify(props)}`; + // console.error(`${message}\n${e.message}`); + // obj = mxs._nativeFactory.createElement('text', rootContainerInstance, {textSize: 0.015, children: message}); + mxs._spatialLogger.logErrorOnCreateElement(type, props, rootContainerInstance, error); } - return obj; + return instance; } // Function: This function is used to create separate text nodes if the target allows only creating text in separate text nodes From dc61591799e56470f7e671d481deb2a64b514604 Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Mon, 27 Apr 2020 16:58:25 -0400 Subject: [PATCH 3/8] WIP: Complete SpatialLogger --- index.js | 6 ++ src/configuration.js | 3 +- .../lumin-runtime/platform-factory.js | 34 ++++++++ .../lumin-runtime/utilities/spatial-logger.js | 77 ++++++++++++++----- 4 files changed, 101 insertions(+), 19 deletions(-) diff --git a/index.js b/index.js index dcb1224..f1a3c68 100644 --- a/index.js +++ b/index.js @@ -11,12 +11,18 @@ XrClientProvider.setXrClient(new XrClient()); export default { _init() { this._nativeFactory = new configuration.nativeFactory(configuration.nativeMapping); + this._spatialLogger = new configuration.spatialLogger(); }, bootstrap(app) { this._init(); this._app = this._nativeFactory.createApp(app); + + if (configuration.showSpatialLogger) { + this._spatialLogger.setNativeApp(this._app); + } + XrClientProvider.getXrClient().setNativeApp(this._app); }, diff --git a/src/configuration.js b/src/configuration.js index 4f230f7..fb8c05e 100644 --- a/src/configuration.js +++ b/src/configuration.js @@ -6,8 +6,9 @@ import { MessageSeverity } from './util/logger.js'; import SpatialLogger from './platform/lumin-runtime/utilities/spatial-logger.js'; export default { + logMinMessageSeverity: MessageSeverity.error, nativeMapping: nativeComponentMapping, nativeFactory: PlatformFactory, spatialLogger: SpatialLogger, - logMinMessageSeverity: MessageSeverity.error + showSpatialLogger: true }; diff --git a/src/platform/lumin-runtime/platform-factory.js b/src/platform/lumin-runtime/platform-factory.js index 9a18772..95cdd41 100644 --- a/src/platform/lumin-runtime/platform-factory.js +++ b/src/platform/lumin-runtime/platform-factory.js @@ -566,6 +566,40 @@ export class PlatformFactory extends NativeFactory { } } + _createConfirmDialogNode (prism, title, message) { + const uiDialog = UiDialog.Create(prism, title, message, null, DialogType.kSingleAction); + uiDialog.setAlignment(Alignment.CENTER_CENTER); + const callbackId = uiDialog.onConfirmSub((eventData) => { + uiDialog.onConfirmUnsub(callbackId) + prism.deleteNode(uiDialog); + }); + return uiDialog; + } + + showSpatialMessage (prism, message) { + prism.getRoot().addChild(this._createConfirmDialogNode(prism, title, message)); + } + + _showErrorOnElementAction (container, message) { + logError(message); + showSpatialMessage(container.controller.getPrism(), message); + } + + showErrorOnCreateElement (type, properties, container, error) { + this._showErrorOnElementAction(container, + `Creating element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`); + } + + showErrorOnUpdateElement (type, properties, container, error) { + this._showErrorOnElementAction(container, + `Updating element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`); + } + + showErrorOnRemoveElement (type, properties, container, error) { + this._showErrorOnElementAction(container, + `Removing element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`); + } + _validateAppType (type) { if (type !== undefined && this._appConstructors[type] === undefined) { throw new TypeError(`Invalid argument: Unknown app type: ${type}`); diff --git a/src/platform/lumin-runtime/utilities/spatial-logger.js b/src/platform/lumin-runtime/utilities/spatial-logger.js index ce51804..49cfe02 100644 --- a/src/platform/lumin-runtime/utilities/spatial-logger.js +++ b/src/platform/lumin-runtime/utilities/spatial-logger.js @@ -1,34 +1,75 @@ -import { ui } from 'lumin'; +import { ui, VEC3_ZERO } from 'lumin'; import { logError } from './logger.js'; -const { UiText, Alignment, HorizontalTextAlignment } = ui; +const { UiText, UiListView, UiListViewItem, Alignment, HorizontalTextAlignment, DialogType } = ui; + const COLOR_RED = [1, 0, 0, 1]; +const COLOR_YELLOW = [1, 1, 0, 1]; +const COLOR_WHITE = [1, 1, 1, 1]; + +const LOG_PRISM_SIZE = [1.0, 1.5, 0]; +const LOG_PRISM_POSITION = [-1.0, 0, 0]; +const LOG_PRISM_ORIENTATION = VEC3_ZERO; +const LOG_MAX_ITEM_COUNT = 100; +const LOG_DEFAULT_ITEM_PADDING = [0.01, 0.01, 0.01, 0.01]; +const LOG_ITEM_TEXT_SIZE = 0.03; +const LOG_ITEM_BOUNDS_WIDTH = LOG_PRISM_SIZE[0]; + +function _createColoredTextNode(prism, message, color) { + const uiText = UiText.Create(prism, message); + uiText.setColor(color); + uiText.setTextSize(LOG_ITEM_TEXT_SIZE); + uiText.setBoundsSize([LOG_ITEM_BOUNDS_WIDTH, 0]); + uiText.setWrapEnabled(true); + return uiText; +} -function _createTextNode (prism, message, color) { - const uiText = UiText.Create(prism, message); - - uiText.setAlignment(Alignment.CENTER_CENTER); - uiText.setTextAlignment(HorizontalTextAlignment.kCenter); - uiText.setColor(color); +function _createLogListView (prism, width, height) { + const uiListView = UiListView.Create(prism, width, height); + uiListView.setAlignment(Alignment.BOTTOM_CENTER); + uiListView.setDefaultItemPadding(LOG_DEFAULT_ITEM_PADDING); + return uiListView; +} - return uiText; +function _createLogPrism (app, size, position, orientation) { + const prism = app.requestNewPrism(size); + app.positionPrism(prism, position); + app.orientPrism(prism, orientation); + return prism; } export default class SpatialLogger { setNativeApp (app) { this._app = app; + this._prism = _createLogPrism(this._app, LOG_PRISM_SIZE, LOG_PRISM_POSITION, LOG_PRISM_ORIENTATION); + this._logView = _createLogListView(this._prism, LOG_PRISM_SIZE[0], LOG_PRISM_SIZE[1]); + this._prism.addChild(this._logView); } - logErrorOnCreateElement (type, properties, container, error) { - const prism = container.controller.getPrism(); - const message = `Creating element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`; - - logError(message); - showSpatialMessage(prism, message, COLOR_RED); + _log(message, color) { + if (this._app === undefined) { + return; + } + + if (this._logView.getItemCount() >= LOG_MAX_ITEM_COUNT) { + this._prism.deleteNode(this._logView.removeItem(0)); + } + + const uiListViewItem = UiListViewItem.Create(prism); + uiListViewItem.addChild(_createColoredTextNode(this._prism, message, color)); + this._logView.addItem(uiListViewItem); } - - showSpatialMessage (prism, message, color) { - prism.getRoot().addChild(_createTextNode(prism, message, color)); + + logInfo(message) { + this._log(message, COLOR_WHITE); + } + + logWarning (message) { + this._log(message, COLOR_YELLOW); + } + + logError (message) { + this._log(message, COLOR_RED); } } \ No newline at end of file From 4d1c81603fac116e0ed8649636d7c423e458d484 Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Mon, 27 Apr 2020 17:36:22 -0400 Subject: [PATCH 4/8] WIP: Resolve reference to the logger.js --- src/platform/lumin-runtime/utilities/spatial-logger.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform/lumin-runtime/utilities/spatial-logger.js b/src/platform/lumin-runtime/utilities/spatial-logger.js index 49cfe02..d4b8f90 100644 --- a/src/platform/lumin-runtime/utilities/spatial-logger.js +++ b/src/platform/lumin-runtime/utilities/spatial-logger.js @@ -1,5 +1,5 @@ import { ui, VEC3_ZERO } from 'lumin'; -import { logError } from './logger.js'; +import { logError } from '../../../util/logger.js'; const { UiText, UiListView, UiListViewItem, Alignment, HorizontalTextAlignment, DialogType } = ui; @@ -33,8 +33,8 @@ function _createLogListView (prism, width, height) { function _createLogPrism (app, size, position, orientation) { const prism = app.requestNewPrism(size); - app.positionPrism(prism, position); - app.orientPrism(prism, orientation); + app.positionPrismRelativeToCamera(prism, position); + app.orientPrismRelativeToCamera(prism, orientation); return prism; } @@ -50,7 +50,7 @@ export default class SpatialLogger { if (this._app === undefined) { return; } - + if (this._logView.getItemCount() >= LOG_MAX_ITEM_COUNT) { this._prism.deleteNode(this._logView.removeItem(0)); } From 827ba9ec72f3b7fae29cba73df23dbc62468b405 Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Mon, 27 Apr 2020 23:37:09 -0400 Subject: [PATCH 5/8] WIP: Resolve runtime exception --- index.js | 5 +- src/configuration.js | 3 +- src/platform/lumin-runtime/mxs-base-app.js | 12 +++ .../lumin-runtime/mxs-immersive-app.js | 4 + .../lumin-runtime/mxs-landscape-app.js | 4 + .../lumin-runtime/platform-factory.js | 2 +- .../lumin-runtime/utilities/spatial-logger.js | 80 ++++++++++++------- 7 files changed, 76 insertions(+), 34 deletions(-) diff --git a/index.js b/index.js index f1a3c68..e4f8fd0 100644 --- a/index.js +++ b/index.js @@ -18,10 +18,7 @@ export default { this._init(); this._app = this._nativeFactory.createApp(app); - - if (configuration.showSpatialLogger) { - this._spatialLogger.setNativeApp(this._app); - } + this._app.SpatialLogger = this._spatialLogger; XrClientProvider.getXrClient().setNativeApp(this._app); }, diff --git a/src/configuration.js b/src/configuration.js index fb8c05e..f24af17 100644 --- a/src/configuration.js +++ b/src/configuration.js @@ -9,6 +9,5 @@ export default { logMinMessageSeverity: MessageSeverity.error, nativeMapping: nativeComponentMapping, nativeFactory: PlatformFactory, - spatialLogger: SpatialLogger, - showSpatialLogger: true + spatialLogger: SpatialLogger }; diff --git a/src/platform/lumin-runtime/mxs-base-app.js b/src/platform/lumin-runtime/mxs-base-app.js index 3136dfb..6b73bd2 100644 --- a/src/platform/lumin-runtime/mxs-base-app.js +++ b/src/platform/lumin-runtime/mxs-base-app.js @@ -26,6 +26,10 @@ export class MxsBaseApp { return this._onAppStartData; } + set SpatialLogger(spatialLogger) { + this._spatialLogger = spatialLogger; + } + onAppStart(args) { this._onAppStartData = { uri: args.getUri(), @@ -35,6 +39,14 @@ export class MxsBaseApp { isShareableApp: typeof this.isShareableApp === 'function' ? this.isShareableApp() : undefined }; + const spatialLoggerProps = this._app.props.spatialLogger; + if (this._spatialLogger && spatialLoggerProps) { + const loggerPrism = executor.callNativeFunction(app, 'requestNewPrism', spatialLoggerProps.size); + executor.callNativeFunction(app, 'positionPrismRelativeToCamera', loggerPrism, spatialLoggerProps.position); + executor.callNativeFunction(app, 'orientPrismRelativeToCamera', loggerPrism, spatialLoggerProps.orientation); + this._spatialLogger.init(loggerPrism); + } + const container = { controller: { getRoot: () => ({ addChild: (child) => logInfo('App container - adding child (scene)') }) diff --git a/src/platform/lumin-runtime/mxs-immersive-app.js b/src/platform/lumin-runtime/mxs-immersive-app.js index a9afab8..109647b 100644 --- a/src/platform/lumin-runtime/mxs-immersive-app.js +++ b/src/platform/lumin-runtime/mxs-immersive-app.js @@ -16,6 +16,10 @@ export class MxsImmersiveApp extends ImmersiveApp { }; } + set SpatialLogger(spatialLogger) { + return this._baseApp.SpatialLogger = spatialLogger; + } + init() { return 0; } diff --git a/src/platform/lumin-runtime/mxs-landscape-app.js b/src/platform/lumin-runtime/mxs-landscape-app.js index d56f698..6cb5b04 100644 --- a/src/platform/lumin-runtime/mxs-landscape-app.js +++ b/src/platform/lumin-runtime/mxs-landscape-app.js @@ -13,6 +13,10 @@ export class MxsLandscapeApp extends LandscapeApp { return this._baseApp.OnAppStartData; } + set SpatialLogger(spatialLogger) { + return this._baseApp.SpatialLogger = spatialLogger; + } + init() { return 0; } diff --git a/src/platform/lumin-runtime/platform-factory.js b/src/platform/lumin-runtime/platform-factory.js index 95cdd41..e393210 100644 --- a/src/platform/lumin-runtime/platform-factory.js +++ b/src/platform/lumin-runtime/platform-factory.js @@ -577,7 +577,7 @@ export class PlatformFactory extends NativeFactory { } showSpatialMessage (prism, message) { - prism.getRoot().addChild(this._createConfirmDialogNode(prism, title, message)); + prism.getRootNode().addChild(this._createConfirmDialogNode(prism, title, message)); } _showErrorOnElementAction (container, message) { diff --git a/src/platform/lumin-runtime/utilities/spatial-logger.js b/src/platform/lumin-runtime/utilities/spatial-logger.js index d4b8f90..72e95ea 100644 --- a/src/platform/lumin-runtime/utilities/spatial-logger.js +++ b/src/platform/lumin-runtime/utilities/spatial-logger.js @@ -1,53 +1,80 @@ -import { ui, VEC3_ZERO } from 'lumin'; +import { ui } from 'lumin'; import { logError } from '../../../util/logger.js'; -const { UiText, UiListView, UiListViewItem, Alignment, HorizontalTextAlignment, DialogType } = ui; +const { UiText, UiListView, UiListViewItem, Alignment, HorizontalTextAlignment } = ui; const COLOR_RED = [1, 0, 0, 1]; const COLOR_YELLOW = [1, 1, 0, 1]; const COLOR_WHITE = [1, 1, 1, 1]; +const COLOR_GRAY = [0.5, 0.5, 0.5, 0.5]; -const LOG_PRISM_SIZE = [1.0, 1.5, 0]; -const LOG_PRISM_POSITION = [-1.0, 0, 0]; -const LOG_PRISM_ORIENTATION = VEC3_ZERO; const LOG_MAX_ITEM_COUNT = 100; -const LOG_DEFAULT_ITEM_PADDING = [0.01, 0.01, 0.01, 0.01]; -const LOG_ITEM_TEXT_SIZE = 0.03; -const LOG_ITEM_BOUNDS_WIDTH = LOG_PRISM_SIZE[0]; +const LOG_DEFAULT_ITEM_PADDING = [0.002, 0.002, 0.002, 0.002]; +const LOG_ITEM_TEXT_SIZE = 0.02; +const LOG_TITLE_HEIGHT = 0.07; +const LOG_TITLE_SIZE = 0.05; +const LOG_TITLE = 'console'; function _createColoredTextNode(prism, message, color) { const uiText = UiText.Create(prism, message); - uiText.setColor(color); + uiText.setTextColor(color); uiText.setTextSize(LOG_ITEM_TEXT_SIZE); - uiText.setBoundsSize([LOG_ITEM_BOUNDS_WIDTH, 0]); - uiText.setWrapEnabled(true); + uiText.setTextAlignment(HorizontalTextAlignment.kLeft); + // uiText.setBoundsSize([prism.getSize()[0], LOG_ITEM_TEXT_SIZE*2], true); return uiText; } -function _createLogListView (prism, width, height) { - const uiListView = UiListView.Create(prism, width, height); - uiListView.setAlignment(Alignment.BOTTOM_CENTER); +function _createLogListView (prism) { + const [width, height] = prism.getSize(); + const uiListView = UiListView.Create(prism, width, height - LOG_TITLE_HEIGHT); uiListView.setDefaultItemPadding(LOG_DEFAULT_ITEM_PADDING); + const x = parseFloat(width) / 2 - 0.002; + const y = parseFloat(height) / 2; + console.log('[x:y]: ', x, y); + uiListView.setLocalPosition([-x, y - LOG_TITLE_HEIGHT, 0]); return uiListView; } -function _createLogPrism (app, size, position, orientation) { - const prism = app.requestNewPrism(size); - app.positionPrismRelativeToCamera(prism, position); - app.orientPrismRelativeToCamera(prism, orientation); - return prism; +function _createLogFrame (prism) { + const [width, height] = prism.getSize(); + const x = parseFloat(width) / 2 - 0.001; + const y = parseFloat(height) / 2; + const line = prism.createLineNode(); + line.setColor(COLOR_GRAY); + line.addPoints([-x, y, 0]); + line.addPoints([ x, y, 0]); + line.addPoints([ x, -y, 0]); + line.addPoints([-x, -y, 0]); + line.addPoints([-x, y, 0]); + return line; +} + +function _createTitle (prism) { + const uiText = UiText.Create(prism, LOG_TITLE); + uiText.setTextSize(LOG_TITLE_SIZE); + const [, height] = prism.getSize(); + const y = parseFloat(height) / 2; + uiText.setLocalPosition([-0.07, y - LOG_TITLE_HEIGHT, 0]); + return uiText; } export default class SpatialLogger { - setNativeApp (app) { - this._app = app; - this._prism = _createLogPrism(this._app, LOG_PRISM_SIZE, LOG_PRISM_POSITION, LOG_PRISM_ORIENTATION); - this._logView = _createLogListView(this._prism, LOG_PRISM_SIZE[0], LOG_PRISM_SIZE[1]); - this._prism.addChild(this._logView); + init (prism) { + if (prism === undefined) { + return; + } + + this._prism = prism; + const rootNode = this._prism.getRootNode(); + rootNode.addChild(_createTitle(this._prism)); + rootNode.addChild(_createLogFrame(this._prism)); + + this._logView = _createLogListView(this._prism); + rootNode.addChild(this._logView); } _log(message, color) { - if (this._app === undefined) { + if (this._prism === undefined) { return; } @@ -55,7 +82,7 @@ export default class SpatialLogger { this._prism.deleteNode(this._logView.removeItem(0)); } - const uiListViewItem = UiListViewItem.Create(prism); + const uiListViewItem = UiListViewItem.Create(this._prism); uiListViewItem.addChild(_createColoredTextNode(this._prism, message, color)); this._logView.addItem(uiListViewItem); } @@ -72,4 +99,3 @@ export default class SpatialLogger { this._log(message, COLOR_RED); } } - \ No newline at end of file From 113d36b3da58c37e04fec406c62fed5e584cdb5b Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Mon, 27 Apr 2020 23:42:48 -0400 Subject: [PATCH 6/8] WIP: Resolve missing reference to app --- src/platform/lumin-runtime/mxs-base-app.js | 2 +- src/platform/lumin-runtime/mxs-immersive-app.js | 2 +- src/platform/lumin-runtime/mxs-landscape-app.js | 2 +- src/platform/lumin-runtime/utilities/spatial-logger.js | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/platform/lumin-runtime/mxs-base-app.js b/src/platform/lumin-runtime/mxs-base-app.js index 6b73bd2..702a8a5 100644 --- a/src/platform/lumin-runtime/mxs-base-app.js +++ b/src/platform/lumin-runtime/mxs-base-app.js @@ -30,7 +30,7 @@ export class MxsBaseApp { this._spatialLogger = spatialLogger; } - onAppStart(args) { + onAppStart(args, app) { this._onAppStartData = { uri: args.getUri(), isInternetConnected: typeof this.isInternetConnected === 'function' ? this.isInternetConnected() : undefined, diff --git a/src/platform/lumin-runtime/mxs-immersive-app.js b/src/platform/lumin-runtime/mxs-immersive-app.js index 109647b..046d561 100644 --- a/src/platform/lumin-runtime/mxs-immersive-app.js +++ b/src/platform/lumin-runtime/mxs-immersive-app.js @@ -25,7 +25,7 @@ export class MxsImmersiveApp extends ImmersiveApp { } onAppStart(arg) { - this._baseApp.onAppStart(arg); + this._baseApp.onAppStart(arg, this); } onAppPause() { diff --git a/src/platform/lumin-runtime/mxs-landscape-app.js b/src/platform/lumin-runtime/mxs-landscape-app.js index 6cb5b04..3520011 100644 --- a/src/platform/lumin-runtime/mxs-landscape-app.js +++ b/src/platform/lumin-runtime/mxs-landscape-app.js @@ -22,7 +22,7 @@ export class MxsLandscapeApp extends LandscapeApp { } onAppStart(arg) { - this._baseApp.onAppStart(arg); + this._baseApp.onAppStart(arg, this); } updateLoop(delta) { diff --git a/src/platform/lumin-runtime/utilities/spatial-logger.js b/src/platform/lumin-runtime/utilities/spatial-logger.js index 72e95ea..e6cffb3 100644 --- a/src/platform/lumin-runtime/utilities/spatial-logger.js +++ b/src/platform/lumin-runtime/utilities/spatial-logger.js @@ -30,7 +30,6 @@ function _createLogListView (prism) { uiListView.setDefaultItemPadding(LOG_DEFAULT_ITEM_PADDING); const x = parseFloat(width) / 2 - 0.002; const y = parseFloat(height) / 2; - console.log('[x:y]: ', x, y); uiListView.setLocalPosition([-x, y - LOG_TITLE_HEIGHT, 0]); return uiListView; } From 1c336af23c97fc8f4bc4e95f34d2b07bde86469f Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Tue, 28 Apr 2020 00:25:00 -0400 Subject: [PATCH 7/8] WIP: Resolve showing error in dialog on create element --- .../lumin-runtime/platform-factory.js | 33 ++++++++++++------- .../magic-script-renderer.js | 5 +-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/platform/lumin-runtime/platform-factory.js b/src/platform/lumin-runtime/platform-factory.js index e393210..419a0fc 100644 --- a/src/platform/lumin-runtime/platform-factory.js +++ b/src/platform/lumin-runtime/platform-factory.js @@ -567,37 +567,46 @@ export class PlatformFactory extends NativeFactory { } _createConfirmDialogNode (prism, title, message) { - const uiDialog = UiDialog.Create(prism, title, message, null, DialogType.kSingleAction); - uiDialog.setAlignment(Alignment.CENTER_CENTER); + const uiDialog = ui.UiDialog.CreateScrolling(prism, title, message, ui.DialogType.kSingleAction, ui.DialogLayout.kStandard); const callbackId = uiDialog.onConfirmSub((eventData) => { - uiDialog.onConfirmUnsub(callbackId) + uiDialog.onConfirmUnsub(callbackId); prism.deleteNode(uiDialog); }); return uiDialog; } - showSpatialMessage (prism, message) { + showSpatialMessage (prism, title, message) { prism.getRootNode().addChild(this._createConfirmDialogNode(prism, title, message)); } - _showErrorOnElementAction (container, message) { + _showErrorOnElementAction (container, title, message) { logError(message); - showSpatialMessage(container.controller.getPrism(), message); + + if (container === undefined || container.controller === undefined) { + return; + } + + if (typeof container.controller.getPrism !== 'function') { + return; + } + + const prism = container.controller.getPrism(); + if (prism === undefined) { + return; + } + this.showSpatialMessage(prism, title, message); } showErrorOnCreateElement (type, properties, container, error) { - this._showErrorOnElementAction(container, - `Creating element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`); + this._showErrorOnElementAction(container, `Creating ${type} has failed`, error.message); } showErrorOnUpdateElement (type, properties, container, error) { - this._showErrorOnElementAction(container, - `Updating element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`); + this._showErrorOnElementAction(container, `Updating ${type} has failed`, error.message); } showErrorOnRemoveElement (type, properties, container, error) { - this._showErrorOnElementAction(container, - `Removing element type ${type} has failed.\nProperties: ${JSON.stringify(properties)}\n${error.message}`); + this._showErrorOnElementAction(container, `Removing ${type} has failed`, error.message); } _validateAppType (type) { diff --git a/src/react-magic-script/magic-script-renderer.js b/src/react-magic-script/magic-script-renderer.js index fe1bfc6..23cfb56 100644 --- a/src/react-magic-script/magic-script-renderer.js +++ b/src/react-magic-script/magic-script-renderer.js @@ -40,10 +40,7 @@ function createInstance(type, props, rootContainerInstance, hostContext, interna try { instance = mxs._nativeFactory.createElement(type, rootContainerInstance, props); } catch (error) { - // let message = `ERROR Type: ${type}\nproperties: ${JSON.stringify(props)}`; - // console.error(`${message}\n${e.message}`); - // obj = mxs._nativeFactory.createElement('text', rootContainerInstance, {textSize: 0.015, children: message}); - mxs._spatialLogger.logErrorOnCreateElement(type, props, rootContainerInstance, error); + mxs._nativeFactory.showErrorOnCreateElement(type, props, rootContainerInstance, error); } return instance; } From 34e6b54e8f085fa345130bd0f0024282dd82bde4 Mon Sep 17 00:00:00 2001 From: Nikolay Grozdanov Date: Tue, 28 Apr 2020 11:55:54 -0400 Subject: [PATCH 8/8] Add try-catch block for Update and Remove --- src/react-magic-script/magic-script-renderer.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/react-magic-script/magic-script-renderer.js b/src/react-magic-script/magic-script-renderer.js index 23cfb56..3175485 100644 --- a/src/react-magic-script/magic-script-renderer.js +++ b/src/react-magic-script/magic-script-renderer.js @@ -227,7 +227,11 @@ function commitMount(instance, type, newProps, internalInstanceHandle) { // newProps: Props, // internalInstanceHandle: Object function commitUpdate(instance, updatePayload, type, oldProps, newProps, internalInstanceHandle) { - mxs._nativeFactory.updateElement(type, instance, oldProps, newProps); + try { + mxs._nativeFactory.updateElement(type, instance, oldProps, newProps); + } catch (error) { + mxs._nativeFactory.showErrorOnUpdateElement(type, props, rootContainerInstance, error); + } } // Function: insertBefore @@ -265,7 +269,11 @@ function insertInContainerBefore(container, child, beforeChild) { // parentInstance: Instance, // child: Instance | TextInstance function removeChild(parentInstance, child) { - mxs._nativeFactory.removeChildElement(parentInstance, child); + try { + mxs._nativeFactory.removeChildElement(parentInstance, child); + } catch (error) { + mxs._nativeFactory.showErrorOnRemoveElement(type, props, rootContainerInstance, error); + } } // Function: removeChildFromContainer