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
193
gaia/apps/fl/js/pick.js
Executable file
193
gaia/apps/fl/js/pick.js
Executable file
|
|
@ -0,0 +1,193 @@
|
|||
'use strict';
|
||||
/* global
|
||||
_,
|
||||
$,
|
||||
ForwardLock,
|
||||
objectStore,
|
||||
RINGTONE_NAME_KEY
|
||||
*/
|
||||
|
||||
// Wait until we're loaded, localized, and get an activity request
|
||||
window.addEventListener('load', function() {
|
||||
navigator.mozL10n.once(function() {
|
||||
navigator.mozSetMessageHandler('activity', function(activity) {
|
||||
var type = activity.source.data.type;
|
||||
if (type === 'ringtone' ||
|
||||
(Array.isArray(type) && type.indexOf('ringtone') !== -1)) {
|
||||
pickRingtone(activity);
|
||||
}
|
||||
else if (type === 'wallpaper' ||
|
||||
(Array.isArray(type) && type.indexOf('wallpaper') !== -1)) {
|
||||
pickWallpaper(activity);
|
||||
}
|
||||
else {
|
||||
console.error('unexpected activity request',
|
||||
activity.source.name,
|
||||
JSON.stringify(activity.source.data));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function pickRingtone(activity) {
|
||||
var selectedRingtone;
|
||||
var selectedRingtoneID;
|
||||
var player = new Audio(); // for previewing sounds
|
||||
var currentRingtoneName;
|
||||
var numRingtones = 0;
|
||||
var container = $('ringtones');
|
||||
var header = $('header');
|
||||
container.hidden = false;
|
||||
|
||||
// Display the right title
|
||||
$('done').hidden = false;
|
||||
$('title').textContent = _('pick-ringtone');
|
||||
|
||||
// Make the cancel button work
|
||||
header.addEventListener('action', function() {
|
||||
player.pause(); // Stop any currently playing sound.
|
||||
activity.postError('cancelled');
|
||||
});
|
||||
|
||||
// Make the done button work
|
||||
$('done').onclick = function() {
|
||||
player.pause(); // Stop any currently playing sound.
|
||||
|
||||
// Lock the ringtone and return it as the activity result
|
||||
ForwardLock.getKey(function(secret) {
|
||||
ForwardLock.lockBlob(secret, selectedRingtone.blob, {},
|
||||
function(lockedBlob) {
|
||||
activity.postResult({
|
||||
blob: lockedBlob,
|
||||
name: selectedRingtone.descriptor.name,
|
||||
id: selectedRingtoneID
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
getCurrentRingtoneName(function(name) {
|
||||
currentRingtoneName = name;
|
||||
enumerateAndBuildUI();
|
||||
});
|
||||
|
||||
function getCurrentRingtoneName(callback) {
|
||||
navigator.mozSettings
|
||||
.createLock()
|
||||
.get(RINGTONE_NAME_KEY)
|
||||
.onsuccess = function(e) {
|
||||
callback(e.target.result[RINGTONE_NAME_KEY]);
|
||||
};
|
||||
}
|
||||
|
||||
function enumerateAndBuildUI() {
|
||||
// Enumerate the ringtones from the database and display them onscreen
|
||||
objectStore.readonly('ringtones', function(ringtoneStore) {
|
||||
var cursor = ringtoneStore.openCursor();
|
||||
cursor.onsuccess = function() {
|
||||
if (cursor.result) {
|
||||
addRingtone(cursor.result.value, 'forwardlock:' + cursor.result.key);
|
||||
cursor.result.continue();
|
||||
}
|
||||
else { // we reached the end of the enumeration
|
||||
if (numRingtones === 0) {
|
||||
displayError(activity, 'no-installed-ringtones');
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function addRingtone(ringtone, id) {
|
||||
numRingtones++;
|
||||
var name = ringtone.descriptor.name;
|
||||
var listItem = document.createElement('li');
|
||||
|
||||
var radio = document.createElement('gaia-radio');
|
||||
radio.name = 'ringtone';
|
||||
|
||||
var label = document.createElement('label');
|
||||
label.textContent = name;
|
||||
radio.appendChild(label);
|
||||
|
||||
if (name === currentRingtoneName) {
|
||||
selectedRingtone = ringtone;
|
||||
selectedRingtoneID = id;
|
||||
radio.checked = true;
|
||||
}
|
||||
|
||||
radio.addEventListener('change', function() {
|
||||
if (radio.checked) {
|
||||
selectedRingtone = ringtone;
|
||||
selectedRingtoneID = id;
|
||||
play(ringtone);
|
||||
}
|
||||
});
|
||||
|
||||
listItem.appendChild(radio);
|
||||
container.appendChild(listItem);
|
||||
}
|
||||
|
||||
function play(ringtone) {
|
||||
// We create blob urls as needed. Since this app is always short-lived
|
||||
// we don't bother releasing them.
|
||||
if (!ringtone.url) {
|
||||
ringtone.url = URL.createObjectURL(ringtone.blob);
|
||||
}
|
||||
player.src = ringtone.url;
|
||||
player.play();
|
||||
}
|
||||
}
|
||||
|
||||
function pickWallpaper(activity) {
|
||||
var numWallpapers = 0;
|
||||
var template = $('wallpaper-template');
|
||||
var container = $('wallpapers');
|
||||
container.hidden = false;
|
||||
|
||||
$('title').textContent = _('pick-wallpaper');
|
||||
$('header').addEventListener('action', function() {
|
||||
activity.postError('cancelled');
|
||||
});
|
||||
|
||||
// Enumerate the wallpapers from the database and display them onscreen
|
||||
objectStore.readonly('wallpapers', function(wallpaperStore) {
|
||||
var cursor = wallpaperStore.openCursor();
|
||||
cursor.onsuccess = function() {
|
||||
if (cursor.result) {
|
||||
addWallpaper(cursor.result.value);
|
||||
numWallpapers++;
|
||||
cursor.result.continue();
|
||||
}
|
||||
else { // we reached the end of the enumeration
|
||||
if (numWallpapers === 0) {
|
||||
displayError(activity, 'no-installed-wallpaper');
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
function addWallpaper(wallpaper) {
|
||||
var blob = wallpaper.blob;
|
||||
var url = URL.createObjectURL(blob);
|
||||
var wallpaperEl = template.content.cloneNode(true).firstElementChild;
|
||||
container.appendChild(wallpaperEl);
|
||||
wallpaperEl.style.backgroundImage = 'url(' + url + ')';
|
||||
wallpaperEl.onclick = function() {
|
||||
ForwardLock.getKey(function(secret) {
|
||||
ForwardLock.lockBlob(secret, blob, {}, function(lockedBlob) {
|
||||
activity.postResult({ blob: lockedBlob });
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function displayError(activity, id) {
|
||||
// using setTimeout here so we don't block with alert() while
|
||||
// a db transaction is still pending
|
||||
setTimeout(function() {
|
||||
alert(_(id));
|
||||
activity.postError(id);
|
||||
});
|
||||
}
|
||||
Loading…
Reference in a new issue