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:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,261 @@
/* global _, debug, CostControl, Common, Formatting, ChartUtils,
SimManager, ConfigManager */
/* jshint -W120 */
/**
* The App Detail view is in charge of usage charts and settings for an
* individual app.
*/
'use strict';
var AppDetailView = (function() {
var costcontrol,
initialized,
els,
app,
localizedAppName,
model;
function initialize() {
if (initialized) {
return;
}
els = {};
CostControl.getInstance(function(instance) {
costcontrol = instance;
// Get elements
els.view = document.getElementById('appdetail-view');
els.header = els.view.querySelector('gaia-header');
els.headerHeading = els.header.querySelector('h1');
els.usage = els.view.querySelector('.usage');
els.graphicArea = els.usage.querySelector('#app-graphic-area');
els.backgroundLayer =
els.graphicArea.querySelector('#app-background-layer');
els.wifiLayer = els.graphicArea.querySelector('#app-wifi-layer');
els.mobileLayer = els.graphicArea.querySelector('#app-mobile-layer');
els.axisLayer = els.graphicArea.querySelector('#app-axis-layer');
els.todayLayer = els.graphicArea.querySelector('#app-today-layer');
els.warningLayer = els.graphicArea.querySelector('#app-warning-layer');
els.limitsLayer = els.graphicArea.querySelector('#app-limits-layer');
els.graphicPattern =
els.graphicArea.querySelector('#app-graphic-pattern');
els.dataUsedSince =
els.usage.querySelector('p[data-l10n-id="data-used-since"]');
els.dataUsedThisWeek =
els.usage.querySelector('p[data-l10n-id="data-used-this-week"]');
els.dataUsedThisMonth =
els.usage.querySelector('p[data-l10n-id="data-used-this-month"]');
// Setup the model
SimManager.requestDataSimIcc(function(dataSimIcc) {
ConfigManager.requestSettings(dataSimIcc.iccId,
function _onSettings(settings) {
debug('First time setup for model');
model = {
height: ChartUtils.toDevicePixels(els.graphicArea.clientHeight),
width: ChartUtils.toDevicePixels(els.graphicArea.clientWidth),
originX: Math.floor(
ChartUtils.toDevicePixels(els.graphicArea.clientWidth) * 0.15),
endX: Math.floor(
ChartUtils.toDevicePixels(els.graphicArea.clientWidth) * 0.95),
axis: {
Y: {
lower: 0,
margin: 0.20
},
X: {
lower: ChartUtils.calculateLowerDate(settings),
upper: ChartUtils.calculateUpperDate(settings)
}
},
limits: {
enabled: settings.dataLimit,
value: ChartUtils.getLimitInBytes(settings),
dataLimitValue: settings.dataLimitValue,
dataLimitUnit: settings.dataLimitUnit
},
data: {
wifi: {
enabled: true
},
mobile: {
enabled: true
}
},
todayLabel: {}
};
});
});
// Attach event listeners
window.addEventListener('viewchanged', function(evt) {
if (evt.detail.id === 'appdetail-view') {
setAppManifestURL(evt.detail.params.manifestURL);
}
});
els.header.addEventListener('action', function(evt) {
var type = evt.detail && evt.detail.type;
if (type === 'back') {
window.location.hash = '#';
}
});
initialized = true;
});
}
function setAppManifestURL(manifestURL) {
// Get App object
app = Common.getApp(manifestURL);
// Update app usage data
updateAppUsageData(app);
// Localize app name
localizedAppName = Common.getLocalizedAppName(app);
// Update the localized app name throughout the view
els.headerHeading.textContent = localizedAppName;
}
function updateAppUsageData(app) {
// Hide usage element until it has been updated/localized.
els.usage.classList.remove('in');
var usageRequest = {
type: 'datausage',
apps: [app.manifestURL]
};
// Request usage for this specific app
costcontrol.request(usageRequest, function(result) {
if (result.status !== 'success') {
console.error('Error requesting data usage. This should not happen.');
return;
}
var data = result.data;
var mobileDataTotal = data.mobile.total;
var formattedMobileDataTotal = Formatting.formatData(
Formatting.roundData(mobileDataTotal));
// Localize the data usage info
els.dataUsedSince.textContent =
_('data-used-since', {
'amount': formattedMobileDataTotal,
'start-date':
Formatting.getFormattedDate(data.start,
Formatting.formatters.longDate)
});
els.dataUsedThisWeek.textContent =
_('data-used-this-week', {
'amount': formattedMobileDataTotal
});
els.dataUsedThisMonth.textContent =
_('data-used-this-month', {
'amount': formattedMobileDataTotal
});
els.dataUsedSince.hidden = true;
els.dataUsedThisWeek.hidden = true;
els.dataUsedThisMonth.hidden = true;
// Update the charts
prepareChartData(result, function() {
// Render the charts
renderChart();
// Fade in usage element
els.usage.classList.add('in');
});
});
}
function prepareChartData(result, callback) {
if (result.status === 'success') {
SimManager.requestDataSimIcc(function(dataSimIcc) {
ConfigManager.requestSettings(dataSimIcc.iccId,
function _onSettings(settings) {
debug('Updating model');
var modelData = result.data;
model.data.wifi.samples = modelData.wifi.samples;
model.data.wifi.total = modelData.wifi.total;
model.data.wifi.apps = modelData.wifi.apps;
model.data.mobile.samples = modelData.mobile.samples;
model.data.mobile.total = modelData.mobile.total;
model.data.mobile.apps = modelData.mobile.apps;
model.limits.enabled = settings.dataLimit;
model.limits.value = ChartUtils.getLimitInBytes(settings);
model.limits.dataLimitValue = settings.dataLimitValue;
model.axis.X.upper = ChartUtils.calculateUpperDate(settings);
model.axis.X.lower = ChartUtils.calculateLowerDate(settings);
ChartUtils.expandModel(model);
// Show correct usage text label
switch (settings.trackingPeriod) {
case 'weekly':
els.dataUsedSince.hidden = true;
els.dataUsedThisWeek.hidden = false;
els.dataUsedThisMonth.hidden = true;
break;
case 'monthly':
els.dataUsedSince.hidden = true;
els.dataUsedThisWeek.hidden = true;
els.dataUsedThisMonth.hidden = false;
break;
default:
els.dataUsedSince.hidden = false;
els.dataUsedThisWeek.hidden = true;
els.dataUsedThisMonth.hidden = true;
break;
}
debug('Rendering');
callback();
});
});
} else {
console.error('Error requesting data usage. This should not happen.');
}
}
function renderChart() {
ChartUtils.drawBackgroundLayer(els.backgroundLayer, model, true);
ChartUtils.drawTodayLayer(els.todayLayer, model);
ChartUtils.drawAxisLayer(els.axisLayer, model, true);
ChartUtils.drawDataLayer(els.wifiLayer, model, 'wifi', {
stroke: ChartUtils.WIFI_CHART_STROKE,
fill: ChartUtils.WIFI_CHART_FILL
});
ChartUtils.drawDataLayer(els.mobileLayer, model, 'mobile', {
stroke: ChartUtils.MOBILE_CHART_STROKE,
fill: ChartUtils.MOBILE_CHART_FILL,
pattern: els.graphicPattern
});
ChartUtils.drawWarningLayer(els.warningLayer, model);
ChartUtils.drawLimits(els.limitsLayer, model, true);
}
function finalize() {
if (!initialized) {
return;
}
initialized = false;
}
return {
initialize: initialize,
finalize: finalize
};
}());
AppDetailView.initialize();