2 * Copyright (c) 2013, Intel Corporation.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 var currentMenu = "main";
12 var resizeCB = resizeMainMenu;
15 var screenOrientation;
18 var contentType = "AUDIO";
19 var audioContent = new Array();
20 var videoContent = new Array();
21 var imageContent = new Array();
24 var currentPlayerType = "AUDIO";
25 var currentMediaList = $("#audioMediaList");
26 var currentMediaListItems = $("#audioMediaListItems");
27 var currentPlayerControls;
28 var audioPlayerControls;
29 var videoPlayerControls;
30 var audioMediaListLoaded = false;
31 var videoMediaListLoaded = false;
32 var imageMediaListLoaded = false;
38 var vidIcon = new Image();
39 var imgIcon = new Image();
40 var musicIcon = new Image();
41 var imagesLoaded = false;
45 var loadAndPlay = false;
46 var loadPrevAudio = false;
47 var loadPrevVideo = false;
48 var playOnConnect = false;
49 var currentFileLoaded = false;
53 var nightMode = false;
54 var waitingToResumeVideo = false; //Media has been paused by exterior forces. If set to true, resume previous media when given the signal.
56 var clearAudioTimeInterval, clearVideoTimeInterval;
58 var mainMenuTitleTemplateLandscape = {"font" : "oblique bolder 30pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
59 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
61 var mainMenuTitleTemplate = {"font" : "oblique bolder 40pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
62 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
64 var mainTrackTemplateLandscape = {"font" : "bold 20pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
65 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
67 var mainTrackTemplate = {"font" : "bold 30pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
68 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
70 var mediaTextTemplate2 = {"font" : "bold 20pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
71 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
73 var mediaTextTemplate3 = {"font" : "bold 20pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
75 var trackTextTemplate = {"font" : "bold 16pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
77 var mediaTextTemplate2Landscape = {"font" : "bold 15pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
78 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
80 var mediaTextTemplate3Landscape = {"font" : "bold 15pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
82 var trackTextTemplateLandscape = {"font" : "bold 11pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
85 var mediaTextTemplate = {"font" : "bold 20pt Arial", "fillStyle" : "", "textAlign" : "left",
86 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 12, "shadowColor" : "red"};
90 console.log("Content discovery failed");
93 function setupSpeech()
95 console.log("MediaPlayer in setupSpeech");
97 speechObj = tizen.speech;
98 speechObj.vocalizeString(" ");
102 var speechEventListener = {
103 onaudiostart: function(){console.log("MediaPlayer: onaudiostart received");},
104 onsoundstart: function(){console.log("MediaPlayer: onsoundstart received");},
105 onspeechstart: function(){console.log("MediaPlayer: onspeechstart received");},
106 onspeechend: function(){console.log("MediaPlayer: onspeechend received");},
107 onsoundend: function(){console.log("MediaPlayer: onsoundend received");},
108 onaudioend: function(){console.log("MediaPlayer: onaudioend received");},
109 onresult: function(result){
111 console.log("MediaPlayer: onresult received");
113 for (var i = 0; i < result.length; i++)
115 console.log("MediaPlayer: forloop, command = " + result[i]);
116 var commandFound = false;
145 onnomatch: function(result){console.log("MediaPlayer: onnomatch received ");},
146 onerror: function(error){console.log("MediaPlayer: onerror received");},
147 onstart: function(){console.log("MediaPlayer: onstart received");},
148 onend: function(){console.log("MediaPlayer: onend received");}
151 speechObj.setCBListener(speechEventListener);
156 console.log("MediaPlayer setupSpeech FAILED + " + err.message);
161 function updateMediaName(newArtist, newTitle, newCover)
163 if (currentMenu === "audio")
165 var playBarHeight = mediaNameCanvas.height;
166 var boxWidth = playBarHeight * 0.75;
167 mediaNameCTX.clearRect(0,0,mediaNameCanvas.width, mediaNameCanvas.height);
169 if (currentPlayerType === "AUDIO")
172 var alphaJump = 0.01;
176 mediaNameCTX.fillStyle="rgba(30,30,30,0.5)";
177 mediaNameCTX.strokeStyle="rgba(130,130,130,1)";
178 mediaNameCTX.lineWidth = 5;
179 mediaNameCTX.fillRect(0,0,mediaNameCanvas.width, playBarHeight);
180 mediaNameCTX.strokeRect(-20,0,mediaNameCanvas.width + 40, playBarHeight);
182 if (newCover === undefined || newCover.naturalWidth === undefined || newCover.naturalWidth <= 0)
184 newCover = musicIcon;
187 mediaNameCTX.drawImage(newCover, 20, (playBarHeight - boxWidth) / 2, boxWidth, boxWidth);
189 if (screenOrientation === "portrait")
191 var textStartX = boxWidth + 50;
193 var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 70 , "zLoc" : 0,
194 "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 65, "wordWrap" : true});
195 trackText.applyTemplate(mainMenuTitleTemplate);
197 var artistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 70, "zLoc" : 0,
198 "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 50, "wordWrap" : true});
199 artistText.applyTemplate(mainTrackTemplate);
203 var textStartX = boxWidth + 50;
204 var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 50 , "zLoc" : 0,
205 "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
206 trackText.applyTemplate(mainMenuTitleTemplateLandscape);
207 var artistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 50, "zLoc" : 0,
208 "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
209 artistText.applyTemplate(mainTrackTemplateLandscape);
213 trackText.drawLargeShadow();
215 artistText.yLoc += trackText.height;
216 artistText.drawObj();
221 function onContentItemArraySuccess(content)
223 console.log("MediaPlayer in onContentItemArraySuccess");
224 var emptyContent = true;
226 if (!content || content === undefined || content.length <= 0)
227 console.log("Invalid content for " + contentType);
230 emptyContent = false;
241 audioContent = audioContent.concat(content);
243 if (localStorage.prevAudioTrack)
245 for (var i = 0; i < audioContent.length; i++)
248 if (audioContent[i].contentURI === localStorage.prevAudioTrack)
252 loadPrevAudio = true;
253 $("#audioSrc").attr("src", audioContent[audioIndex].contentURI);
261 $("#audioSrc").attr("src", audioContent[0].contentURI);
262 localStorage.prevAudioTrack = audioContent[0].contentURI;
267 for (var i = 0; i < audioContent.length; i++)
269 var iconURI = (audioContent[i].thumbnailURIs !== undefined && audioContent[i].thumbnailURIs !== null) ? audioContent[i].thumbnailURIs[0] : "images/musicIcon.png";
270 audioContent[i].coverArtURI = iconURI;
275 audioMediaListLoaded = true;
276 currentMediaListItems = $("#audioMediaListItems");
277 fillMediaList(audioContent);
282 console.log("Error when parsing audioContent");
286 contentType = "VIDEO";
292 videoContent = videoContent.concat(content);
294 if (localStorage.prevVideo)
296 for (var i = 0; i < videoContent.length; i++)
298 if (videoContent[i].contentURI === localStorage.prevVideo)
301 loadPrevVideo = true;
302 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
310 $("#videoSrc").attr("src", videoContent[0].contentURI);
311 localStorage.prevVideo = videoContent[0].contentURI;
316 contentType = "IMAGE";
322 imageContent = imageContent.concat(content);
323 $("#imagePlayer").css("background", "url(" + imageContent[0].contentURI + ") no-repeat center");
324 $("#imagePlayer").css("background-size", "contain");
326 contentType = undefined;
330 console.log("Undefined content search type");
331 nextContentType = undefined;
335 if (contentType !== undefined)
336 getMedia(contentType);
339 function getMedia(mediaType)
341 console.log("MediaPlayer in getMedia");
342 var manager = tizen.content;
344 var filter = new tizen.AttributeFilter("type", "EXACTLY", mediaType);
345 manager.find(onContentItemArraySuccess, onError, null, filter);
348 function showMediaMenu()
350 console.log("MediaPlayer in showMediaMenu");
351 $(".navButton").fadeIn(800);
353 switch(currentPlayerType)
359 if (audioContent.length > 0)
360 updateMediaName(audioContent[audioIndex].artists[0], audioContent[audioIndex].title, audioContent[audioIndex].coverArt);
364 console.log("updateMediaName failed for showMediaMenu (audio) : " + err.message);
367 $("#mediaName").fadeIn(800);
368 $(".sortButton").fadeIn(800);
369 currentPlayer.fadeIn(800);
371 if (screenOrientation === "landscape" )
372 $("#audioMediaList").addClass("landscape");
374 $("#audioMediaList").removeClass("landscape");
376 $("#audioMediaList").fadeIn(800);
381 setTimeout(function(){currentPlayer.show()}, 800); //The video element can't be faded, so wait a moment before showing
386 currentPlayer.fadeIn(800);
390 console.log("Invalid player type");
395 function showMediaList()
397 console.log("MediaPlayer in showMediaList");
399 if (currentMediaList.is(":visible"))
400 currentMediaList.fadeOut(300);
403 currentMediaList.fadeIn(300);
407 function changeMenu(menuButtonId)
409 console.log("MediaPlayer in changeMenu");
410 var clickedButton = $("#" + menuButtonId);
411 var buttonWidth = clickedButton.width();
412 var buttonHeight = clickedButton.height();
413 var buttonBottom = clickedButton.css("bottom");
414 var buttonRight = clickedButton.css("right");
416 //Animate the clicked button slightly
417 clickedButton.animate({
418 bottom: screenOrientation === "portrait" ? "+=0" : "+=50",
419 right: screenOrientation === "portrait" ? "+=50" : "+=0",
423 //Reset the size once done
425 clickedButton.width(buttonWidth);
426 clickedButton.height(buttonHeight);
428 if (screenOrientation === "portrait")
429 clickedButton.css({"right": buttonRight});
431 clickedButton.css({"bottom": buttonBottom});
435 $(".mainButton").fadeOut(300);
439 case ("mainMusicButton"):
440 speechObj.vocalizeString("Music player");
441 currentMenu = "audio";
442 currentPlayer = $("#audioPlayer");
443 currentPlayerControls = document.getElementById("audioPlayer");
444 currentPlayerType = "AUDIO";
445 currentMediaList = $("#audioMediaList");
446 currentMediaListItems = $("#audioMediaListItems");
447 currentContent = audioContent;
449 if (!audioMediaListLoaded)
450 fillMediaList(currentContent);
455 case ("mainVideoButton"):
456 speechObj.vocalizeString("Video player");
457 currentMenu = "video";
458 currentPlayer = $("#videoPlayer");
459 currentPlayerControls = document.getElementById("videoPlayer");
460 currentPlayerType = "VIDEO";
461 currentMediaList = $("#videoMediaList");
462 currentMediaListItems = $("#videoMediaListItems");
463 currentContent = videoContent;
465 if (!videoMediaListLoaded)
466 fillMediaList(currentContent);
471 case ("mainImageButton"):
472 speechObj.vocalizeString("Picture viewer");
473 currentMenu = "image";
474 currentPlayer = $("#imagePlayer");
475 currentPlayerControls = imageControls;
476 currentPlayerType = "IMAGE";
477 currentMediaList = $("#imageMediaList");
478 currentMediaListItems = $("#imageMediaListItems");
479 currentContent = imageContent;
481 if (!imageMediaListLoaded)
482 fillMediaList(currentContent);
487 console.log("Error: No menu by that name");
492 function showMainMenu()
494 console.log("MediaPlayer in showMainMenu");
495 currentMenu = "main";
497 if (!currentPlayerControls.paused && currentPlayerType === "AUDIO")
498 clearInterval(clearAudioTimeInterval);
499 else if (!currentPlayerControls.paused && currentPlayerType === "VIDEO")
500 clearInterval(clearVideoTimeInterval);
502 currentPlayerControls.pause();
504 //If the media list is showing, hide it. Remove the mediaListAudioList class if it exists so that it will resize properly
505 if (currentMediaList.is(":visible"))
506 currentMediaList.fadeOut(300);
508 $(".navButton").fadeOut(300);
509 $(".sortButton").fadeOut(300);
510 $("#mediaName").fadeOut(300);
512 if (currentPlayerType !== "VIDEO")
513 currentPlayer.fadeOut(300);
515 currentPlayer.hide();
518 $(".mainButton").css({"opacity": "100"});
519 $(".mainButton").fadeIn(800);
522 function sortByAlpha(contentToSort)
524 console.log("MediaPlayer in sortByAlpha");
526 if (currentPlayerType === "AUDIO")
529 //If contentToSort is undefined it's because the request came from the sortBy buttons
530 if (contentToSort === undefined)
531 contentToSort = audioContent;
533 contentToSort.sort(function (a,b) {
534 var first = a.title.toLowerCase();
535 var second = b.title.toLowerCase();
545 fillMediaList(contentToSort);
548 function sortByArtist(contentToSort)
550 console.log("MediaPlayer in sortByArtist");
552 if (currentPlayerType === "AUDIO")
555 if (contentToSort === undefined)
556 contentToSort = audioContent;
558 contentToSort.sort(function (a,b) {
559 var first = a.artists[0].toLowerCase();
560 var second = b.artists[0].toLowerCase();
570 fillMediaList(contentToSort);
573 function sortByAlbum(contentToSort)
575 if (currentPlayerType === "AUDIO")
578 console.log("MediaPlayer in sortByAlbum");
579 if (contentToSort === undefined)
580 contentToSort = audioContent;
582 contentToSort.sort(function (a,b) {
583 var first = a.album.toLowerCase();
584 var second = b.album.toLowerCase();
594 fillMediaList(contentToSort);
597 /**************************************** NAVIGATION FUNCTIONS *******************************************/
599 // This function is called once a file being loaded is ready to play
600 function playLoadedMedia()
602 console.log("MediaPlayer in playLoadedMedia");
603 currentFileLoaded = true;
607 currentPlayerControls.play();
608 clearAudioTimeInterval = setInterval(
610 if (localStorage.prevAudioTime === audioPlayerControls.currentTime)
614 if (stallCounter > 10)
616 //Remote media has stalled, attempt to reconnect
617 playOnConnect = true;
618 tizen.mediaserver.scanNetwork(reconnectServer);
622 localStorage.prevAudioTime = audioPlayerControls.currentTime;
625 if (audioContent[audioIndex].remoteFile)
630 else if (loadPrevAudio)
632 audioPlayerControls.currentTime = localStorage.prevAudioTime;
633 loadPrevAudio = false;
637 function videoLoaded()
641 videoPlayerControls.currentTime = localStorage.prevVideoTime;
642 loadPrevVideo = false;
646 function playButtonClick()
648 console.log("MediaPlayer in playButtonClick");
649 if (currentPlayerType !== "AUDIO" || currentFileLoaded)
651 if (currentPlayerControls.paused)
655 currentPlayerControls.currentTime = localStorage.prevAudioTime;
658 currentPlayerControls.play();
660 //Start tracking the current time of the media. This is used to play from previous position on restart.
661 if (currentPlayerType === "AUDIO")
662 clearAudioTimeInterval = setInterval(function(){localStorage.prevAudioTime = currentPlayerControls.currentTime},500);
663 else if (currentPlayerType === "VIDEO")
664 clearVideoTimeInterval = setInterval(function(){localStorage.prevVideoTime = currentPlayerControls.currentTime},500);
669 currentPlayerControls.pause();
671 if (currentPlayerType === "AUDIO")
672 clearInterval(clearAudioTimeInterval);
673 else if (currentPlayerType === "VIDEO")
674 clearInterval(clearVideoTimeInterval);
678 console.log(audioContent[audioIndex].artists[0] + " : " + audioContent[audioIndex].title + " can't play yet, it hasn't loaded");
681 function pauseButtonClick()
683 console.log("MediaPlayer in pauseButtonClick");
684 if (!currentPlayerControls.paused)
686 currentPlayerControls.pause();
690 function backButtonClick()
692 console.log("MediaPlayer in backButtonClick");
693 switch (currentPlayerType)
701 audioIndex = audioContent.length - 1;
706 $("#audioSrc").attr("src", audioContent[audioIndex].contentURI);
707 updateMediaName(audioContent[audioIndex].artists[0], audioContent[audioIndex].title, audioContent[audioIndex].coverArt);
709 localStorage.prevAudioTrack = audioContent[audioIndex].contentURI;
720 videoIndex = videoContent.length - 1;
723 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
734 imageIndex = imageContent.length - 1;
736 $("#imagePlayer").css("background", "url(" + imageContent[imageIndex].contentURI + ") no-repeat center");
737 $("#imagePlayer").css("background-size", "contain");
742 console.log("Content failure");
748 function nextButtonClick()
750 console.log("MediaPlayer in nextButtonClick");
751 switch (currentPlayerType)
756 if (audioContent.length > (audioIndex + 1))
764 $("#audioSrc").attr("src", audioContent[audioIndex].contentURI);
766 localStorage.prevAudioTrack = audioContent[audioIndex].contentURI;
767 updateMediaName(audioContent[audioIndex].artists[0], audioContent[audioIndex].title, audioContent[audioIndex].coverArt);
775 if (videoContent.length > (videoIndex + 1))
781 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
789 if (imageContent.length > (imageIndex + 1))
794 $("#imagePlayer").css("background", "url(" + imageContent[imageIndex].contentURI + ") no-repeat center");
795 $("#imagePlayer").css("background-size", "contain");
800 console.log("Content failure");
805 /**************************************** END NAVIGATION FUNCTIONS *******************************************/
807 function resizeMainMenu()
809 console.log("MediaPlayer in resizeMainMenu");
811 currentMediaList.fadeOut(0);
812 screenWidth = window.innerWidth;
813 screenHeight = window.innerHeight;
814 screenOrientation = screenWidth < screenHeight ? "portrait" : "landscape";
815 iconWidth = screenOrientation === "portrait" ? screenHeight / 4 : screenWidth / 4;
818 $(".mainButton").width(iconWidth + "px");
819 $(".mainButton").height(iconWidth + "px");
821 var iconsTop = screenOrientation === "portrait" ? ((screenHeight - (iconWidth * 3)) / 2) - (padding * 3) : (screenHeight - iconWidth) / 2;
823 if (screenOrientation === "portrait")
824 $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : (screenWidth / 2) - (iconWidth /2) - padding + "px", "width" : "50%"});
827 $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : ((iconWidth / 2) - (padding * 3)) + "px", "width" : "100%"});
828 $("#sortButtons").addClass("landscape");
832 function resizePlayerPage()
834 console.log("MediaPlayer in resizePlayerPage");
836 audioPlayer = document.getElementById("audioPlayer");
837 videoPlayer = document.getElementById("videoPlayer");
838 screenWidth = window.innerWidth;
839 screenHeight = window.innerHeight;
842 var buttonWidth = screenOrientation === "portrait" ? screenHeight * 0.05 : screenWidth * 0.05;
844 $("#backButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) - (buttonWidth *3)) + "px"});
845 $("#nextButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) + (buttonWidth *2)) + "px"});
846 $("#returnButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": padding + "px"});
847 $("#listButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": (screenWidth - buttonWidth - padding * 2) + "px"});
848 $("#playButton").css({"width": buttonWidth * 1.15 + "px", "height": buttonWidth * 1.15 + "px", "top": padding * 0.3 + "px", "left": (screenWidth / 2) - (buttonWidth / 2) + "px"});
850 mediaNameCanvas.width = (screenWidth);
851 mediaNameCanvas.height = (screenHeight * 0.34) - (buttonWidth + (2 * padding));
852 mediaNameCanvas.style.top = (buttonWidth + (2 * padding) ) + "px";
853 mediaNameCanvas.style.left = "0px";
855 var sortButtonTop = (buttonWidth + (2 * padding) ) + mediaNameCanvas.height - (buttonWidth * 1.3);
856 var sortButtonWidth = buttonWidth * 2.5;
857 var buttonSpacing = screenWidth / 5;
859 mediaListItemW = $("#videoMediaList").width() * 0.92;
860 mediaListItemH = $("#videoMediaList").height() / 10;
865 console.log("MediaPlayer in resizeAll");
871 * swipe - Handles swipe events. Currently it just acts as another way to hit the next / back buttons, but
872 * it could be expanded to other things in the future.
875 function swipe(direction, object)
877 console.log("MediaPlayer in swipe");
881 if (direction === "right")
883 else if (direction === "left")
892 function toggleNightMode(nightModeValue)
894 if (nightMode !== nightModeValue)
896 Array.prototype.forEach.call (document.querySelectorAll ('*'), function (el) {el.classList.toggle('night');});
897 nightMode = nightModeValue;
903 console.log("MediaPlayer in init");
904 var vehicle = tizen.vehicle;
907 /* Subscribe to AMB NightMode signal, and switch colors
908 * upon receipt of the signal
911 if (vehicle && vehicle !== undefined)
913 var getVal = vehicle.get("NightMode");
915 //Check that NightMode returned a value before trying to hook up to it
918 toggleNightMode(getVal.nightMode);
921 /* Subscribe to AMB NightMode signal, and switch colors
922 * upon receipt of the signal
925 vehicle.subscribe("NightMode",function(value) {
926 console.log("MediaPlayer: Day / Night mode changed to " + value.nightMode);
927 toggleNightMode(value.nightMode);
931 /* Subscribe to AMB DrivingMode signal, and pause video
932 * upon receipt of the signal
936 vehicle.subscribe("DrivingMode",function(value) {
937 console.log("MediaPlayer: DrivingMode changed to " + value.drivingMode);
939 if (value.drivingMode > 0 && currentPlayerType === "VIDEO" && !currentPlayerControls.paused)
941 console.log("MediaPlayer: pausing video due to vehicle motion");
942 currentPlayerControls.pause();
943 waitingToResumeVideo = true;
945 else if (value.drivingMode === 0 && currentPlayerType === "VIDEO" && waitingToResumeVideo)
947 console.log("MediaPlayer: vehicle has stopped, resuming video");
948 currentPlayerControls.play();
949 waitingToResumeVideo = false;
954 musicIcon.src = "images/musicIcon.png";
955 vidIcon.src = "images/videoIcon.png";
956 imgIcon.src = "images/imageIcon.png";
957 imageControls = new ImageControls();
959 audioPlayerControls = document.getElementById("audioPlayer");
960 videoPlayerControls = document.getElementById("videoPlayer");
962 mediaNameCanvas = document.getElementById("mediaName");
963 mediaNameCTX = mediaNameCanvas.getContext("2d");
965 //Resize all items and search for local media
968 //Check if DLNA plugin is installed. If so, scan for media.
969 if (tizen.mediaserver)
971 //Currently no success signal, so continue trying until a server is found. Once that
972 //happens, clear the stopServerSearch interval
974 stopServerSearch = setInterval(function(){console.log("MediaPlayer searching for remote media..."); tizen.mediaserver.scanNetwork(foundMediaServer);}, 5000);
977 console.log("MediaPlayer: No DLNA server running, using local media only...");
979 //Setup voice control
983 console.log("MediaPlayer: Speech Recognition not running, voice control will be unavailable");
986 setTimeout(function(){getMedia(contentType);}, 500);
988 //Prevent highlighting
989 window.ondragstart = function() { return false; }
991 $(window).bind('resize', resizeAll);
993 //Simple swipe detection
994 $("#mediaName").mousedown(function(e){mouseDownEvent = e;});
995 $("#mediaName").mouseup(function(e){
996 if (Math.abs(mouseDownEvent.clientY - e.clientY) < 100)
998 if (Math.abs(mouseDownEvent.clientX - e.clientX) > 100)
1000 if (mouseDownEvent.clientX > e.clientX)
1001 swipe("left", "mediaName");
1003 swipe("right", "mediaName");
1008 document.getElementById('videoPlayer').addEventListener("playing", function() {
1009 $("#playButton").toggleClass('playing', true);
1010 $("#navigationButtons").hide();
1012 document.getElementById('videoPlayer').addEventListener("pause", function() {
1013 $("#playButton").toggleClass('playing', false);
1014 $("#navigationButtons").show();
1016 document.getElementById('videoPlayer').addEventListener("ended", function() {
1017 $("#playButton").toggleClass('playing', false);
1018 $("#navigationButtons").show();
1020 document.getElementById('audioPlayer').addEventListener("playing", function() {
1021 $("#playButton").toggleClass('playing', true);
1023 document.getElementById('audioPlayer').addEventListener("pause", function() {
1024 $("#playButton").toggleClass('playing', false);
1026 document.getElementById('audioPlayer').addEventListener("ended", function() {
1027 $("#playButton").toggleClass('playing', false);
1029 document.getElementById('imagePlayer').addEventListener("click", function() {
1030 if (imageControls.paused)
1037 // pause the slideshow and fade in the controls
1038 imageControls.pause();
1039 $("#navigationButtons").show();
1044 $(document).ready(function () {