summaryrefslogtreecommitdiff
path: root/src/components/HMI/app/model/sdl/AppModel.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/HMI/app/model/sdl/AppModel.js')
-rw-r--r--src/components/HMI/app/model/sdl/AppModel.js421
1 files changed, 421 insertions, 0 deletions
diff --git a/src/components/HMI/app/model/sdl/AppModel.js b/src/components/HMI/app/model/sdl/AppModel.js
new file mode 100644
index 0000000000..6f93e2d668
--- /dev/null
+++ b/src/components/HMI/app/model/sdl/AppModel.js
@@ -0,0 +1,421 @@
+/*
+ * Copyright (c) 2013, Ford Motor Company All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met: ·
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer. · Redistributions in binary
+ * form must reproduce the above copyright notice, this list of conditions and
+ * the following disclaimer in the documentation and/or other materials provided
+ * with the distribution. · Neither the name of the Ford Motor Company nor the
+ * names of its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * @name SDL.SDLAppModel
+ * @desc Abstarct model for SDL applications
+ * @category Model
+ * @filesource app/model/sdl/AppModel.js
+ * @version 1.0
+ */
+
+SDL.SDLAppModel = Em.Object.extend({
+
+ /**
+ * List of subscribed data on VehicleInfo model
+ *
+ * @type {Object}
+ */
+ subscribedData: {},
+
+ /**
+ * Application's container for current processed requests on HMI
+ *
+ * @type {Object}
+ */
+ activeRequests: {},
+
+ /**
+ * Application Id
+ *
+ * @type {Number}
+ */
+ appID: null,
+
+ /**
+ * Application name
+ *
+ * @type {String}
+ */
+ appName: '',
+
+ /**
+ * Navigation streaming url
+ */
+ navigationStream: null,
+
+ /**
+ * Navigation streaming url
+ */
+ navigationAudioStream: null,
+
+ /**
+ * Chosen device name
+ *
+ * @type {String}
+ */
+ deviceName: '',
+
+ /**
+ * Chosen device id
+ *
+ * @type {String}
+ */
+ deviceID: null,
+
+ /**
+ * Global properties for current application
+ *
+ * @type {Object}
+ */
+ globalProperties: {},
+
+ /**
+ * Statusbar text
+ *
+ * @type {String}
+ */
+ statusText: '',
+
+ /**
+ * Info data
+ *
+ * @type: {Em.Object}
+ */
+ appInfo: null,
+
+ /**
+ * Current language of applications UI component
+ *
+ * @type {String}
+ */
+ UILanguage: 'EN-US',
+
+ /**
+ * Current language of applications TTS and applications VR component
+ *
+ * @type {String}
+ */
+ TTSVRLanguage: 'EN-US',
+
+ /**
+ * List of VR commands
+ */
+ VRCommands: [],
+
+ /**
+ * Array of Soft Buttons
+ *
+ * @type {Array}
+ */
+ softButtons: [],
+
+ /**
+ * Array of Soft Buttons
+ *
+ * @type {Array}
+ */
+ turnListSoftButtons: [],
+
+ /**
+ * Array of Objects for TBTTurnList
+ *
+ * @type {Array}
+ */
+ turnList: [],
+
+ /**
+ * Policies
+ * Array of avaliable permission codes for current app
+ * came from SDLCore in SDL.GetListOfPermissions response
+ *
+ * @type {Array}
+ */
+ allowedFunctions: [],
+
+ /**
+ * URL to application Icon
+ *
+ * @type {String}
+ */
+ appIcon: 'images/info/info_leftMenu_apps_ico.png',
+
+ /**
+ * Application commands list
+ *
+ * @type {Array}
+ */
+ commandsList: {
+ 0: []
+ },
+
+ /**
+ * Flag to open ShowConstantTBTview when entering to current screen
+ *
+ * @type {Boolean}
+ */
+ tbtActivate: false,
+
+ /**
+ * Return current menu commands
+ *
+ * @return {Array}
+ */
+ currentCommandsList: function () {
+
+ return this.get('commandsList.' + this.get('currentSubMenuId'));
+ }.property('this.currentSubMenuId'),
+
+ /**
+ * Current command submenu identificator
+ *
+ * @type {Number}
+ */
+ currentSubMenuId: 'top',
+
+ /**
+ * Return current submenu name
+ *
+ * @return {String}
+ */
+ currentSubMenuLabel: function () {
+
+ //Param "top" is Top level menu index
+ var submenu, commands = this.commandsList["top"];
+
+ for (var i = 0; i < commands.length; i++) {
+ if (commands[i].menuID == this.currentSubMenuId) {
+ submenu = commands[i].name;
+ }
+ }
+
+ return this.get('currentSubMenuId') != 'top' ? submenu : 'Options';
+ }.property('this.currentSubMenuId'),
+
+ /**
+ * Interaction chooses data
+ *
+ * @type {Object}
+ */
+ interactionChoices: {},
+
+ /**
+ * Method to remove deleted by SDL Core images used in HMI
+ *
+ * @param imageName
+ */
+ onImageRemoved: function(imageName){
+
+ var result = false;
+
+ // Get list of subMenus with commands
+ for (var commands in this.commandsList) {
+
+ // Check if object item (subMenu list of commands) is added list with command in object and not an inherited method of object
+ if(this.commandsList.hasOwnProperty(commands)){
+
+ var len = this.commandsList[commands].length;
+ for (var i = 0; i < len; i++) {
+
+ // Check image name with each command in each subMenu
+ if (this.commandsList[commands][i].icon) {
+ if (this.commandsList[commands][i].icon.indexOf(imageName) != -1
+ && imageName.length == this.commandsList[commands][i].icon.length) {
+
+ // If found same image path than set default icon path
+ this.commandsList[commands][i].icon = SDL.SDLModel.defaultListOfIcons.command;
+ result = true;
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Update Soft Buttons will handle on command Show
+ *
+ * @param {Array}
+ */
+ updateSoftButtons: function (buttons) {
+
+ // delete existing buttons from array
+ this.softButtons.splice(0);
+
+ // push new buttons to array
+ this.get('softButtons').pushObjects(buttons);
+ },
+
+ /**
+ * Add command to list
+ *
+ * @param {Object}
+ */
+ addCommand: function (request) {
+
+ var parentID = request.params.menuParams.parentID > 0 ? request.params.menuParams.parentID : 'top';
+
+ if (!this.get('commandsList.' + parentID)) {
+ this.commandsList[parentID] = [];
+ }
+
+ var commands = this.get('commandsList.' + parentID);
+
+ // Magic number is limit of 1000 commands added on one menu
+ if (commands.length <= 999) {
+
+ commands[commands.length] = {
+ commandID: request.params.cmdID,
+ name : request.params.menuParams.menuName,
+ parent : parentID,
+ position : request.params.menuParams.position ? request.params.menuParams.position : 0,
+ icon : request.params.cmdIcon ? request.params.cmdIcon.value : null
+ };
+
+ if (SDL.SDLController.getApplicationModel(request.params.appID) && SDL.OptionsView.active) {
+ SDL.SDLAppController.buttonsSort(parentID, this.appID);
+ SDL.OptionsView.commands.refreshItems();
+ }
+
+ console.log(commands.length);
+ if (request.id >= 0) {
+ FFW.UI.sendUIResult(SDL.SDLModel.resultCode["SUCCESS"], request.id, request.method);
+ }
+ } else {
+ FFW.UI.sendError(SDL.SDLModel.resultCode["REJECTED"], request.id, request.method, 'Adding more than 1000 item to the top menu or to submenu is not allowed.');
+ }
+
+ },
+
+ /**
+ * Delete command from list
+ *
+ * @param {Number}
+ */
+ deleteCommand: function (commandID, requestID) {
+
+ for (var i in this.commandsList) {
+ if (this.commandsList[i].filterProperty('commandID', commandID).length) {
+ if (i != this.currentSubMenuId || this.currentSubMenuId == 'top') {
+ this.get('commandsList.' + i).removeObjects(this.get('commandsList.' + i).filterProperty('commandID', commandID));
+ SDL.SDLModel.deleteCommandResponse(SDL.SDLModel.resultCode["SUCCESS"], requestID);
+ return;
+ } else {
+ SDL.SDLModel.deleteCommandResponse(SDL.SDLModel.resultCode["IN_USE"], requestID);
+ return;
+ }
+ }
+ }
+ },
+
+ /**
+ * Add submenu to commands list
+ *
+ * @param {Object}
+ */
+ addSubMenu: function (request) {
+
+ // parentID is equal to 'top' cause Top level menu ID
+ var parentID = 'top';
+
+ var commands = this.get('commandsList.' + parentID);
+
+ // Magic number is limit of 1000 commands added on one menu
+ if (commands.length <= 999) {
+
+ this.commandsList[request.params.menuID] = [];
+ commands[commands.length] = {
+ menuID : request.params.menuID,
+ name : request.params.menuParams.menuName ? request.params.menuParams.menuName : '',
+ parent : 0,
+ position: request.params.menuParams.position ? request.params.menuParams.position : 0
+ };
+
+ if (SDL.SDLController.getApplicationModel(request.params.appID) && SDL.OptionsView.active) {
+ SDL.SDLAppController.buttonsSort(parentID, this.appID);
+ SDL.OptionsView.commands.refreshItems();
+ }
+
+ FFW.UI.sendUIResult(SDL.SDLModel.resultCode["SUCCESS"], request.id, request.method);
+ } else {
+ FFW.UI.sendError(SDL.SDLModel.resultCode["REJECTED"], request.id, request.method, 'Adding more than 1000 item to the top menu or to submenu is not allowed.');
+ }
+ },
+
+ /**
+ * Delete submenu and related commands from list
+ *
+ * @param {Number}
+ */
+ deleteSubMenu: function (menuID) {
+
+ if (this.commandsList['top'].filterProperty('commandID', menuID)) {
+ this.get('commandsList.top').removeObjects(this.get('commandsList.top').filterProperty('menuID', menuID));
+ delete(this.commandsList[menuID]);
+ }
+
+ return SDL.SDLModel.resultCode['SUCCESS'];
+ },
+
+ /**
+ * SDL UI CreateInteraction response handeler push set of commands to
+ * voice recognition list
+ *
+ * @param {Object}
+ */
+ onCreateInteraction: function (message) {
+
+ this.interactionChoices[message.interactionChoiceSetID] = message.choiceSet;
+
+ },
+
+ /**
+ * SDL UI DeleteInteraction response handeler close current interaction
+ * set window (if opened) and delete current set commands from voice
+ * recognition list
+ *
+ * @param {Object}
+ */
+ onDeleteInteraction: function (message) {
+
+ delete this.interactionChoices[message.interactionChoiceSetID];
+ },
+
+ /**
+ * SDL UI Slider response handeler open Slider window with received
+ * parameters
+ *
+ * @param {Object}
+ */
+ onSlider: function (message) {
+
+ SDL.SliderView.loadData(message);
+
+ SDL.SliderView.activate(this.appName, message.params.timeout);
+
+ }
+ });