Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #22621 from mancas/bug796428
Browse files Browse the repository at this point in the history
Bug 796428 - [Quick Settings] Toggling Mobile data while roaming and Dat... r=kgrandon
  • Loading branch information
BavarianTomcat committed Sep 8, 2014
2 parents e824054 + 33d0fa7 commit 9a73b83
Show file tree
Hide file tree
Showing 7 changed files with 156 additions and 12 deletions.
20 changes: 14 additions & 6 deletions apps/settings/js/carrier.js
Expand Up @@ -792,15 +792,17 @@ var CarrierSettings = (function(window, document, undefined) {
* work is done.
*/
function getWarningEnabled(callback) {
window.asyncStorage.getItem(warningDialogEnabledKey,
function getItemCb(warningEnabled) {
var request = _settings.createLock().get(warningDialogEnabledKey);

request.onsuccess = function onSuccessHandler() {
var warningEnabled = request.result[warningDialogEnabledKey];
if (warningEnabled === null) {
warningEnabled = true;
}
if (callback) {
callback(warningEnabled);
}
});
};
}

/**
Expand All @@ -814,12 +816,18 @@ var CarrierSettings = (function(window, document, undefined) {
_settings.createLock().set(cset);
}

function setWarningDialogState(state) {
var cset = {};
cset[warningDialogEnabledKey] = !!state;
_settings.createLock().set(cset);
}

/**
* Helper function. Handler to be called once the user click on the
* accept button form the warning dialog.
*/
function onSubmit() {
window.asyncStorage.setItem(warningDialogEnabledKey, false);
setWarningDialogState(false);
explanationItem.hidden = false;
setState(true);
if (warningDisabledCallback) {
Expand All @@ -832,7 +840,7 @@ var CarrierSettings = (function(window, document, undefined) {
* cancel button form the warning dialog.
*/
function onReset() {
window.asyncStorage.setItem(warningDialogEnabledKey, true);
setWarningDialogState(true);
}

// Register an observer to monitor setting changes.
Expand Down Expand Up @@ -860,7 +868,7 @@ var CarrierSettings = (function(window, document, undefined) {
enabled = request.result[settingKey];
}
if (enabled) {
window.asyncStorage.setItem(warningDialogEnabledKey, false);
setWarningDialogState(false);
explanationItem.hidden = false;
}
};
Expand Down
11 changes: 11 additions & 0 deletions apps/system/index.html
Expand Up @@ -1018,6 +1018,17 @@ <h1 data-l10n-id="ime-addkeyboards">Add keyboards</h1>
</section>
</form>

<form data-type="confirm" role="dialog" id="quick-setting-data-enabled-dialog" class="generic-dialog" data-z-index-level="quick-setting-data-enabled-dialog">
<section>
<h1 data-l10n-id="data-roaming-enabled-title"></h1>
<p data-l10n-id="data-roaming-enabled-warning"></p>
</section>
<menu>
<button type="button" class="quick-setting-data-cancel-btn recommend" data-l10n-id="notNow">Not now</button>
<button type="button" class="quick-setting-data-ok-btn" data-l10n-id="turnOn">Turn ON</button>
</menu>
</form>

<div id="lockscreen-camera" data-z-index-level="lockscreen-camera"></div>

<!-- template for LockScreen window. -->
Expand Down
118 changes: 113 additions & 5 deletions apps/system/js/quick_settings.js
Expand Up @@ -10,6 +10,9 @@ var QuickSettings = {
WIFI_STATUSCHANGE_TIMEOUT: 2000,
// ID of elements to create references
ELEMENTS: ['wifi', 'data', 'bluetooth', 'airplane-mode', 'full-app'],
WARNING_DIALOG_ENABLED_KEY: 'ril.data.roaming_enabled.warningDialog.enabled',
DATA_KEY: 'ril.data.enabled',
DATA_ROAMING_KEY: 'ril.data.roaming_enabled',

init: function qs_init() {
var settings = window.navigator.mozSettings;
Expand Down Expand Up @@ -242,12 +245,15 @@ var QuickSettings = {
if (this.data.dataset.airplaneMode !== 'true') {
// TODO should ignore the action if data initialization isn't done
enabled = !!this.data.dataset.enabled;

SettingsListener.getSettingsLock().set({
'ril.data.enabled': !enabled
});
if (enabled) {
var cset = {};
cset[this.DATA_KEY] = !enabled;
this.setMozSettings(cset);
} else {
//Data is not active we want to enable it
this.showDataRoamingEnabledPromptIfNeeded();
}
}

break;

case this.bluetooth:
Expand Down Expand Up @@ -392,6 +398,108 @@ var QuickSettings = {
'wifi.connect_via_settings': false
});
}
},

checkDataRoaming: function qs_checkDataRoaming() {
var lock = SettingsListener.getSettingsLock();
var reqSetting = lock.get(this.DATA_ROAMING_KEY);
var self = this;
return new Promise(function(resolve, reject) {
reqSetting.onerror = function() {
resolve(true);
};
reqSetting.onsuccess = function() {
resolve(reqSetting.result[self.DATA_ROAMING_KEY]);
};
});
},

showDataRoamingEnabledPromptIfNeeded:
function qs_showDataRoamingEnabledPromptIfNeeded() {
var dialog = document.querySelector('#quick-setting-data-enabled-dialog'),
enableBtn = document.querySelector('.quick-setting-data-ok-btn'),
cancelBtn = document.querySelector('.quick-setting-data-cancel-btn');
var self = this;
var connections = window.navigator.mozMobileConnections;
var dataType;
var sim;

if (!connections) {
return;
}
// In DualSim only one of them will have data active
for (var i = 0; i < connections.length && !dataType; i++) {
dataType = connections[i].data.type;
sim = connections[i];
}
if (!dataType) {
//No connection available
return;
}

this.checkDataRoaming().then(function(roaming) {
if (!roaming && sim.data.roaming) {
disabledDefaultDialogIfNeeded();
} else {
var cset = {};
cset[self.DATA_KEY] = true;
self.setMozSettings(cset);
return;
}
});

// Hides the warning dialog to prevent to show it in settings app again
var disabledDefaultDialogIfNeeded = function() {
self.getDataRoamingWarning().then(function(warningEnabled) {
if (warningEnabled === null || warningEnabled) {
var cset = {};
cset[self.WARNING_DIALOG_ENABLED_KEY] = false;
self.setMozSettings(cset);
}
enableDialog(true);
});
};

var enableSetting = function() {
var cset = {};
cset[self.DATA_KEY] = true;
cset[self.DATA_ROAMING_KEY] = true;
self.setMozSettings(cset);
enableDialog(false);
};

var cancel = function() {
enableDialog(false);
};

function enableDialog(enabled) {
if (enabled) {
UtilityTray.hide();
enableBtn.addEventListener('click', enableSetting);
cancelBtn.addEventListener('click', cancel);
dialog.classList.add('visible');
} else {
enableBtn.removeEventListener('click', enableSetting);
cancelBtn.removeEventListener('click', cancel);
dialog.classList.remove('visible');
}
}
},

getDataRoamingWarning: function qs_getDataRoamingWarning() {
var lock = SettingsListener.getSettingsLock();
var reqSetting = lock.get(this.WARNING_DIALOG_ENABLED_KEY);
var self = this;

return new Promise(function(resolve, reject) {
reqSetting.onerror = function() {
resolve(true);
};

reqSetting.onsuccess = function() {
resolve(reqSetting.result[self.WARNING_DIALOG_ENABLED_KEY]);
};
});
}
};

Expand Down
5 changes: 5 additions & 0 deletions apps/system/locales/system.en-US.properties
Expand Up @@ -5,6 +5,8 @@ cancel=Cancel
close=Close
skip=Skip
clear.ariaLabel=Clear
enable=Enable
turnOn=Turn On

# LOCALIZATION NOTE(undo.ariaLabel): The following string is spoken by screen
# readers and not shown on the screen.
Expand Down Expand Up @@ -282,6 +284,9 @@ delete=Delete
unrecoverable-error-title=Remove Application
unrecoverable-error-body=Cannot install application due to an unrecoverable error. Please try downloading again. The application will be removed.
unrecoverable-error-action=OK
# Quick settings dialog
data-roaming-enabled-title=Turn on data roaming?
data-roaming-enabled-warning=In order to access network via data connection, you also need to turn on data roaming. Depending on your service agreement, extra charges may apply. Do you want to proceed?

# value selector, time/date picker
select-time=Select time
Expand Down
9 changes: 9 additions & 0 deletions apps/system/style/quick_settings/quick_settings.css
Expand Up @@ -75,3 +75,12 @@
.quick-settings-airplane-mode {
opacity: 0.5;
}
#quick-setting-data-enabled-dialog {
/* Increasing padding size form 1.5 to 3.5rem for confirm dialogs with statusbar active */
padding-top: 3.5rem;
display: none;
}
#quick-setting-data-enabled-dialog.visible {
display: inline-block;
pointer-events: auto;
}
3 changes: 2 additions & 1 deletion apps/system/style/zindex.css
Expand Up @@ -220,7 +220,8 @@
#screen > [data-z-index-level="app-install-dialog"],
#screen > [data-z-index-level="updates-download-dialog"],
#screen > [data-z-index-level="updates-viaDataConnection-dialog"],
#screen > [data-z-index-level="emergency-callback-dialog"] {
#screen > [data-z-index-level="emergency-callback-dialog"],
#screen > [data-z-index-level="quick-setting-data-enabled-dialog"] {
z-index: 1024;
}

Expand Down
2 changes: 2 additions & 0 deletions build/config/common-settings.json
Expand Up @@ -149,6 +149,8 @@
"ril.data.mmsproxy": "",
"ril.data.mmsport": 0,
"ril.data.roaming_enabled": false,
"ril.data.roaming_enabled.warningDialog.enabled": true,
"ril.data.enabled.warningDialog.enabled": true,
"ril.data.user": "",
"ril.data.authtype": "notDefined",
"ril.mms.apn": "",
Expand Down

0 comments on commit 9a73b83

Please sign in to comment.