cordova-plugin-app-preferences
Version:
Application preferences plugin and preference pane generator
273 lines (192 loc) • 7.91 kB
JavaScript
function AppPreferencesW8() {
}
// http://blogs.msdn.com/b/going_metro/archive/2012/04/22/integrating-with-windows-8-settings-charm.aspx
// http://msdn.microsoft.com/en-us/library/windows/apps/hh770544.aspx
// http://www.silverlightshow.net/items/Windows-8-Metro-Add-settings-to-your-application.aspx
// http://blogs.msdn.com/b/glengordon/archive/2012/09/17/managing-settings-in-windows-phone-and-windows-8-store-apps.aspx
function getContainer (settings, dict, create) {
var hasContainer;
if (!dict) {
return settings;
}
hasContainer = settings.containers.hasKey (dict);
if (!hasContainer) {
if (create) {
return settings.createContainer(dict, Windows.Storage.ApplicationDataCreateDisposition.Always);
}
return null;
}
return settings.containers.lookup(dict)
}
function watchEventHandler (event) {
if (typeof cordova !== "undefined" && this.watchChanges) {
cordova.fireDocumentEvent('preferencesChanged', {});
}
}
AppPreferencesW8.prototype.nativeWatch = function (args) {
// Occurs when roaming application data is synchronized.
// https://msdn.microsoft.com/en-us/magazine/dn857358.aspx
var applicationData = Windows.Storage.ApplicationData.current;
var eventHandler = watchEventHandler.bind (this);
if (args.subscribe) {
applicationData.addEventListener ("datachanged", eventHandler);
} else {
applicationData.removeEventListener ("datachanged", eventHandler);
}
}
AppPreferencesW8.prototype.nativeFetch = function(successCallback, errorCallback, args) {
var self = this;
var settings = Windows.Storage.ApplicationData.current[args.cloudSync ? 'roamingSettings' : 'localSettings'];
var container = getContainer (settings, args.dict);
if (container === null) {
return successCallback(null);
}
var result = null;
if (container.values.hasKey(args.key)) {
result = container.values[args.key];
}
var value = null;
if (result) {
try {
value = JSON.parse (result);
} catch (e) {
value = result;
}
}
successCallback(value);
// argscheck.checkArgs('fF', 'Device.getInfo', arguments);
// exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
};
AppPreferencesW8.prototype.nativeStore = function(successCallback, errorCallback, args) {
var self = this;
args.value = JSON.stringify(args.value);
var settings = Windows.Storage.ApplicationData.current[args.cloudSync ? 'roamingSettings' : 'localSettings'];
var container = getContainer (settings, args.dict, true);
if (container === null) {
return successCallback(null);
}
var result = null;
container.values[args.key] = args.value;
successCallback ();
};
AppPreferencesW8.prototype.nativeRemove = function (successCallback, errorCallback, args) {
var self = this;
var settings = Windows.Storage.ApplicationData.current[args.cloudSync ? 'roamingSettings' : 'localSettings'];
var container = getContainer (settings, args.dict);
if (container === null) {
return successCallback(null);
}
var result = null;
if (container.values.hasKey(args.key)) {
result = container.values.remove (args.key);
}
successCallback();
};
AppPreferencesW8.prototype.nativeClearAll = function (successCallback, errorCallback, args) {
var self = this;
var settings = Windows.Storage.ApplicationData.current[args.cloudSync ? 'roamingSettings' : 'localSettings'];
var container = getContainer (settings, args.dict);
if (container === null) {
return successCallback(null);
}
var result = null;
container.clear ();
successCallback();
};
AppPreferencesW8.prototype.show = function (successCallback, errorCallback, args) {
var self = this;
// The Show method raises an exception if one of the following is true:
// •It is called from a snapped app.
// •It is called when the current app does not have focus.
// •It is called when the pane is already displayed.
try {
var settingsPane = Windows.UI.ApplicationSettings.SettingsPane.show();
} catch (e) {
}
successCallback();
return;
// adding command to settings charm example
var settingsPane = Windows.UI.ApplicationSettings.SettingsPane.getForCurrentView();
function commandsRequested(eventArgs) {
var applicationCommands = eventArgs.request.applicationCommands;
var privacyCommand = new Windows.UI.ApplicationSettings.SettingsCommand('privacy', 'Privacy Policy', function () {
window.open('index.html');
});
applicationCommands.append(privacyCommand);
}
settingsPane.addEventListener("commandsrequested", commandsRequested);
return;
// another way (not works)
"use strict";
var page = WinJS.UI.Pages.define("/html/4-ProgrammaticInvocation.html", {
ready: function (element, options) {
document.getElementById("scenario4Add").addEventListener("click", scenario4AddSettingsFlyout, false);
document.getElementById("scenario4Show").addEventListener("click", scenario4ShowSettingsFlyout, false);
// clear out the current on settings handler to ensure scenarios are atomic
WinJS.Application.onsettings = null;
// Display invocation instructions in the SDK sample output region
WinJS.log && WinJS.log("To show the settings charm, invoke the charm bar by swiping your finger on the right edge of the screen or bringing your mouse to the lower-right corner of the screen, then select Settings. Or you can just press Windows logo + i. To dismiss the settings charm, tap in the application, swipe a screen edge, right click, invoke another charm or application.", "sample", "status");
}
});
function scenario4AddSettingsFlyout() {
WinJS.Application.onsettings = function (e) {
e.detail.applicationcommands = {
"defaults": {
title: "Defaults",
href: "/html/4-SettingsFlyout-Settings.html"
}
};
WinJS.UI.SettingsFlyout.populateSettings(e);
};
// Make sure the following is called after the DOM has initialized. Typically this would be part of app initialization
WinJS.Application.start();
// Display a status message in the SDK sample output region
WinJS.log && WinJS.log("Defaults settings flyout added from 4-SettingsFlyout-Settings.html", "samples", "status");
}
function scenario4ShowSettingsFlyout() {
WinJS.UI.SettingsFlyout.showSettings("defaults", "/html/4-SettingsFlyout-Settings.html");
// Display a status message in the SDK sample output region
WinJS.log && WinJS.log("Defaults settings flyout showing", "samples", "status");
}
};
if (!window.WinJS.UI.SettingsFlyout) {
var scriptElem = document.createElement("script");
if (navigator.appVersion.indexOf('MSAppHost/3.0') !== -1) {
// Windows 10 UWP
scriptElem.src = '/WinJS/js/ui.js';
} else if (navigator.appVersion.indexOf("Windows Phone 8.1;") !== -1) {
// not supported: https://msdn.microsoft.com/en-us/library/windows/apps/hh701253.aspx
// windows phone 8.1 + Mobile IE 11
// scriptElem.src = "//Microsoft.Phone.WinJS.2.1/js/ui.js";
} else if (navigator.appVersion.indexOf("MSAppHost/2.0;") !== -1) {
// windows 8.1 + IE 11
scriptElem.src = "//Microsoft.WinJS.2.0/js/ui.js";
} else {
// windows 8.0 + IE 10
scriptElem.src = "//Microsoft.WinJS.1.0/js/ui.js";
}
scriptElem.addEventListener("load", onWinFlyoutReady);
document.head.appendChild(scriptElem);
}
else {
onWinFlyoutReady();
}
function onWinFlyoutReady() {
AddSettingsFlyout();
}
function AddSettingsFlyout() {
WinJS.Application.onsettings = function (e) {
e.detail.applicationcommands = {
"Preferences": {
title: "Preferences",
href: "/www/apppreferences.html"
}
};
WinJS.UI.SettingsFlyout.populateSettings(e);
};
// Make sure the following is called after the DOM has initialized. Typically this would be part of app initialization
WinJS.Application.start();
// Display a status message in the SDK sample output region
WinJS.log && WinJS.log("Defaults settings flyout added from 4-SettingsFlyout-Settings.html", "samples", "status");
}
module.exports = new AppPreferencesW8();