Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
160
gaia/tv_apps/smart-system/js/applications.js
Executable file
160
gaia/tv_apps/smart-system/js/applications.js
Executable file
|
|
@ -0,0 +1,160 @@
|
|||
/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
'use strict';
|
||||
/* global Applications, applications*/
|
||||
/** Application module handles the information of apps on behalf of other
|
||||
* modules
|
||||
* @class Applications
|
||||
*/
|
||||
(function(exports) {
|
||||
function Applications() {
|
||||
}
|
||||
|
||||
Applications.prototype = {
|
||||
/**
|
||||
* The installed APPs list
|
||||
* @access public
|
||||
* @type {Object}
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
installedApps: {},
|
||||
|
||||
/**
|
||||
* The statuts about get all installed Apps by mozApps API.
|
||||
* @access public
|
||||
* @type {boolean}
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
ready: false,
|
||||
|
||||
/**
|
||||
* Stop the Applications services,
|
||||
* un-register apps.mgmt.oninstall and apps.mgmt.uninstall handler.
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
stop: function a_stop() {
|
||||
this.ready = false;
|
||||
this.installedApps = {};
|
||||
navigator.mozApps.mgmt.getAll().onsuccess = null;
|
||||
navigator.mozApps.mgmt.oninstall = null;
|
||||
navigator.mozApps.mgmt.onuninstall = null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Start the Applications to get all installed Apps and
|
||||
* register apps.mgmt.oninstall and apps.mgmt.uninstall handler.
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
start: function a_start() {
|
||||
var self = this;
|
||||
var apps = navigator.mozApps;
|
||||
|
||||
var getAllApps = function getAllApps() {
|
||||
navigator.mozApps.mgmt.getAll().onsuccess = function mozAppGotAll(evt) {
|
||||
var apps = evt.target.result;
|
||||
apps.forEach(function(app) {
|
||||
self.installedApps[app.manifestURL] = app;
|
||||
// TODO Followup for retrieving homescreen & comms app
|
||||
});
|
||||
|
||||
self.ready = true;
|
||||
self.fireApplicationReadyEvent();
|
||||
};
|
||||
};
|
||||
|
||||
// We need to wait for the chrome shell to let us know when it's ok to
|
||||
// launch activities. This prevents race conditions.
|
||||
// The event does not fire again when we reload System app in on
|
||||
// B2G Desktop, so we save the information into sessionStorage.
|
||||
if (window.sessionStorage.getItem('webapps-registry-ready')) {
|
||||
getAllApps();
|
||||
} else {
|
||||
window.addEventListener('mozChromeEvent', function mozAppReady(event) {
|
||||
if (event.detail.type != 'webapps-registry-ready') {
|
||||
return;
|
||||
}
|
||||
|
||||
window.sessionStorage.setItem('webapps-registry-ready', 'yes');
|
||||
window.removeEventListener('mozChromeEvent', mozAppReady);
|
||||
|
||||
getAllApps();
|
||||
});
|
||||
}
|
||||
|
||||
apps.mgmt.oninstall = function a_install(evt) {
|
||||
var newapp = evt.application;
|
||||
self.installedApps[newapp.manifestURL] = newapp;
|
||||
|
||||
self.fireApplicationInstallEvent(newapp);
|
||||
};
|
||||
|
||||
apps.mgmt.onuninstall = function a_uninstall(evt) {
|
||||
var deletedapp = evt.application;
|
||||
delete self.installedApps[deletedapp.manifestURL];
|
||||
|
||||
self.fireApplicationUninstallEvent(deletedapp);
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Get App by ManifestURL.
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
getByManifestURL: function a_getByManifestURL(manifestURL) {
|
||||
if (manifestURL in this.installedApps) {
|
||||
return this.installedApps[manifestURL];
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Broadcast ApplicationReadyEvent when mozApps.mgmt.getAll() done.
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
|
||||
fireApplicationReadyEvent: function a_fireAppReadyEvent() {
|
||||
var evt = new CustomEvent('applicationready',
|
||||
{ bubbles: true,
|
||||
cancelable: false,
|
||||
detail: { applications: this.installedApps } });
|
||||
window.dispatchEvent(evt);
|
||||
},
|
||||
|
||||
/**
|
||||
* Broadcast ApplicationInstallEvent when apps.mgmt.oninstall occured.
|
||||
* We need to dispatch the following events because
|
||||
* mozApps is not doing so right now.
|
||||
* ref: @link https://bugzilla.mozilla.org/show_bug.cgi?id=731746
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
|
||||
fireApplicationInstallEvent: function a_fireApplicationInstallEvent(app) {
|
||||
var evt = new CustomEvent('applicationinstall',
|
||||
{ bubbles: true,
|
||||
cancelable: false,
|
||||
detail: { application: app } });
|
||||
window.dispatchEvent(evt);
|
||||
},
|
||||
|
||||
/**
|
||||
* Broadcast ApplicationUninstallEvent when apps.mgmt.onuninstall occured.
|
||||
* @memberof Applications.prototype
|
||||
*/
|
||||
|
||||
fireApplicationUninstallEvent:
|
||||
function a_fireApplicationUninstallEvent(app) {
|
||||
var evt = new CustomEvent('applicationuninstall',
|
||||
{ bubbles: true,
|
||||
cancelable: false,
|
||||
detail: { application: app } });
|
||||
window.dispatchEvent(evt);
|
||||
}
|
||||
};
|
||||
|
||||
exports.Applications = Applications;
|
||||
}(window));
|
||||
|
||||
window.applications = new Applications();
|
||||
applications.start();
|
||||
Loading…
Reference in a new issue