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

289
gaia/apps/costcontrol/js/fte.js Executable file
View file

@ -0,0 +1,289 @@
/* global AutoSettings, BalanceLowLimitView, Common, ConfigManager, SimManager,
dataLimitConfigurer, LazyLoader, debug, ViewManager */
/*
* First time experience is in charge of set up the application.
*/
(function() {
'use strict';
// Fallback from some values, just in case they are missed from configuration
var DEFAULT_LOW_LIMIT_THRESHOLD = 3;
var defaultLowLimitThreshold = DEFAULT_LOW_LIMIT_THRESHOLD;
window.addEventListener('DOMContentLoaded', function _onDomReady() {
initLazyFTE();
});
function initLazyFTE() {
var SCRIPTS_NEEDED = [
'js/utils/debug.js',
'js/utils/toolkit.js',
'js/sim_manager.js',
'js/common.js',
'js/config/config_manager.js',
'js/views/BalanceLowLimitView.js',
'js/view_manager.js',
'js/settings/autosettings.js'
];
LazyLoader.load(SCRIPTS_NEEDED, function onScriptsLoaded() {
setupFTE();
parent.postMessage({
type: 'fte_ready',
data: ''
}, Common.COST_CONTROL_APP);
window.addEventListener('localized', _onLocalize);
});
}
var wizard, vmanager;
var toStep2, step = 0;
function setupFTE() {
if (SimManager.isMultiSim()) {
window.addEventListener('dataSlotChange', function _onDataSimChange() {
window.removeEventListener('dataSlotChange', _onDataSimChange);
// Close FTE if change the SimCard for data connections
Common.closeFTE();
});
}
ConfigManager.requestAll(function _onSettings(configuration, settings) {
wizard = document.getElementById('firsttime-view');
vmanager = new ViewManager();
// Getting some values from config
if (configuration && configuration.default_low_limit_threshold) {
defaultLowLimitThreshold = configuration.default_low_limit_threshold;
}
// Initialize resetTime and trackingPeriod to default values
ConfigManager.setOption({resetTime: 1, trackingPeriod: 'monthly' });
var mode = ConfigManager.getApplicationMode();
var SCRIPTS_NEEDED = [
'js/settings/limitdialog.js',
'js/utils/formatting.js'
];
LazyLoader.load(SCRIPTS_NEEDED, function onScriptsLoaded() {
Common.loadNetworkInterfaces(function() {
AutoSettings.addType('data-limit', dataLimitConfigurer);
if (mode === 'DATA_USAGE_ONLY') {
AutoSettings.initialize(ConfigManager, vmanager,
'#non-vivo-step-2');
}
});
});
// Currency is set by config as well
if (configuration && configuration.credit &&
configuration.credit.currency) {
document.getElementById('currency').textContent =
configuration.credit.currency;
}
if (mode === 'DATA_USAGE_ONLY') {
debug('FTE for non supported SIM');
wizard.dataset.steps = '3';
reset(['step-1', 'non-vivo-step-1', 'non-vivo-step-2']);
AutoSettings.initialize(ConfigManager, vmanager, '#non-vivo-step-1');
} else {
wizard.dataset.steps = '4';
reset(['step-1', 'step-2']);
AutoSettings.initialize(ConfigManager, vmanager, '#step-1');
// Plantype selection
toStep2 = document.getElementById('to-step-2');
toStep2.disabled = true;
document.getElementById('prepaid-plan')
.addEventListener('click', selectTrack);
document.getElementById('postpaid-plan')
.addEventListener('click', selectTrack);
addLowLimitStepConstrains();
}
// Navigation
var next = document.querySelectorAll('[data-navigation=next]');
[].forEach.call(next, function cc_eachNext(nextButton) {
nextButton.addEventListener('click', onNext);
});
var prev = document.querySelectorAll('[data-navigation=back]');
[].forEach.call(prev, function cc_eachPrev(prevButton) {
prevButton.addEventListener('click', onBack);
});
var finish = document.querySelectorAll('[data-navigation=finish]');
[].forEach.call(finish, function cc_eachFinish(finishButton) {
finishButton.addEventListener('click', onFinish);
});
// Needed to put the alarms for balance and networkUsage
LazyLoader.load(['js/costcontrol.js'], function() {
var messageHandlerFrame = document.getElementById('message-handler');
messageHandlerFrame.src = 'message_handler.html';
});
});
}
function _onLocalize() {
Common.localizeWeekdaySelector(
document.getElementById('pre3-select-weekday'));
Common.localizeWeekdaySelector(
document.getElementById('post2-select-weekday'));
Common.localizeWeekdaySelector(
document.getElementById('non2-select-weekday'));
function _setResetTimeToDefault(evt) {
var today = new Date();
var defaultResetTime = (evt.target.value === 'weekly') ?
today.getDay() : today.getDate();
ConfigManager.setOption({ resetTime: defaultResetTime });
}
// Localized resetTime on trackingPeriod change
var trackingPeriodSelector = document
.querySelectorAll('[data-option="trackingPeriod"]');
[].forEach.call(trackingPeriodSelector, function _reset(tPeriodSel) {
tPeriodSel.addEventListener('change', _setResetTimeToDefault);
});
}
if (window.location.hash) {
wizard = document.getElementById('firsttime-view');
if (window.location.hash === '#PREPAID' ||
window.location.hash === '#POSTPAID') {
wizard.querySelector('.authed-sim').hidden = false;
} else {
wizard.querySelector('.nonauthed-sim').hidden = false;
}
}
// TRACK SETUP
var currentTrack = ['step-1', 'step-2'];
function selectTrack(evt) {
if (evt.target.value === 'prepaid') {
currentTrack = ['step-1', 'step-2', 'prepaid-step-2', 'prepaid-step-3'];
AutoSettings.initialize(ConfigManager, vmanager, '#prepaid-step-2');
AutoSettings.initialize(ConfigManager, vmanager, '#prepaid-step-3');
balanceLowLimitView.disabled = false;
ConfigManager.setOption({
dataLimitValue: 40,
dataLimitUnit: 'MB',
lowLimit: true,
lowLimitThreshold: defaultLowLimitThreshold
});
} else if (evt.target.value === 'postpaid') {
currentTrack = ['step-1', 'step-2', 'postpaid-step-2', 'postpaid-step-3'];
AutoSettings.initialize(ConfigManager, vmanager, '#postpaid-step-2');
AutoSettings.initialize(ConfigManager, vmanager, '#postpaid-step-3');
balanceLowLimitView.disabled = true;
ConfigManager.setOption({ dataLimitValue: 2, dataLimitUnit: 'GB' });
}
ConfigManager.setOption({ plantype: evt.target.value }, function _onSet() {
toStep2.disabled = false;
});
}
// NAVIGATION
function reset(track) {
// Reposition screens
var currentScreen = document.getElementById(currentTrack[step]);
var newStartScreen = document.getElementById(track[0]);
currentScreen.dataset.viewport = 'left';
newStartScreen.dataset.viewport = 'right';
delete newStartScreen.dataset.viewport;
for (var i = 1; i < track.length; i += 1) {
var id = track[i];
if (id) {
var screen = document.getElementById(id);
screen.dataset.viewport = 'right';
}
}
// Reset state
step = 0;
currentTrack = track;
}
function onNext() {
if (step === currentTrack.length - 1) {
return;
}
var currentId = currentTrack[step];
var currentScreen = document.getElementById(currentId);
var nextScreenId = currentTrack[step + 1];
var nextScreen = document.getElementById(nextScreenId);
// Enter the next screen
delete nextScreen.dataset.viewport;
currentScreen.dataset.viewport = 'left';
step += 1;
// Validate when in step 2 in order to restore buttons and errors
if (step === 2) {
balanceLowLimitView && balanceLowLimitView.validate();
}
}
function onBack() {
if (step === 0) {
return;
}
var currentId = currentTrack[step];
var currentScreen = document.getElementById(currentId);
var prevScreenId = currentTrack[step - 1];
var prevScreen = document.getElementById(prevScreenId);
// Enter the previous screen
delete prevScreen.dataset.viewport;
currentScreen.dataset.viewport = 'right';
step -= 1;
}
function onFinish(evt) {
evt.target.disabled = true;
SimManager.requestDataSimIcc(function(dataSim) {
ConfigManager.requestSettings(dataSim.iccId,
function _onSettings(settings) {
ConfigManager.setOption({ fte: false }, function _returnToApp() {
Common.updateNextReset(settings.trackingPeriod, settings.resetTime,
function _returnToTheApplication() {
Common.startApp();
}
);
});
});
});
}
// Add particular constrains to the page where setting low limit button
var balanceLowLimitView;
function addLowLimitStepConstrains() {
var nextButton = document.getElementById('low-limit-next-button');
balanceLowLimitView = new BalanceLowLimitView(
document.getElementById('low-limit'),
document.getElementById('low-limit-input')
);
balanceLowLimitView.onvalidation = function(evt) {
nextButton.disabled = !evt.isValid;
};
}
}());