diff --git a/apps/backswipe/boot.js b/apps/backswipe/boot.js index c45acd4c8..5f7122220 100644 --- a/apps/backswipe/boot.js +++ b/apps/backswipe/boot.js @@ -1,4 +1,6 @@ (function () { + var settings = require("Storage").readJSON("backswipe.json", 1) || {}; + // Overrride the default setUI method, so we can save the back button callback var setUI = Bangle.setUI; Bangle.setUI = function (mode, cb) { @@ -7,9 +9,11 @@ options = mode; } + var currentFile = global.__FILE__ || ""; + print("Setting UI"); if(global.BACK) delete global.BACK; - if (options && options.back) { + if (options && options.back && enabledForApp(currentFile)) { print("Saving back callback"); global.BACK = options.back; } @@ -28,6 +32,17 @@ } } + function enabledForApp(app) { + if (!settings) return true; + if (settings.mode === "blacklist") { + return !settings.apps.includes(app); + } else if (settings.mode === "whitelist") { + return settings.apps.includes(app); + } else { + return settings.mode === "on" ? true : false; + } + } + // Listen to left to right swipe Bangle.on("swipe", goBack); })(); diff --git a/apps/backswipe/metadata.json b/apps/backswipe/metadata.json index 6b7eea3d8..7aa9f6247 100644 --- a/apps/backswipe/metadata.json +++ b/apps/backswipe/metadata.json @@ -8,6 +8,10 @@ "supports" : ["BANGLEJS2"], "type": "bootloader", "storage": [ - {"name":"backswipe.boot.js","url":"boot.js"} + {"name":"backswipe.boot.js","url":"boot.js"}, + {"name":"backswipe.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"backswipe.json"} ] } diff --git a/apps/backswipe/settings.js b/apps/backswipe/settings.js new file mode 100644 index 000000000..80ab25878 --- /dev/null +++ b/apps/backswipe/settings.js @@ -0,0 +1,103 @@ +(function() { + var FILE = 'backswipe.json'; + // Mode can be 'blacklist', 'whitelist', 'on' or 'disabled' + // Apps is an array of app names, where all the apps that are there are either blocked or allowed, depending on the mode + var DEFAULTS = { + 'mode': 'blacklist', + 'apps': [] + }; + + var settings = {}; + + var loadSettings = function() { + var settings = require('Storage').readJSON(FILE, 1) || DEFAULTS; + return settings; + } + + var saveSettings = function(settings) { + require('Storage').write(FILE, settings); + } + + var getApps = function() { + var apps = require('Storage').list(/\.info$/).map(app => { + return app.replace('.info', ''); + }); + return apps; + } + + var getSettings = function() { + var settings = loadSettings(); + return { + mode: settings.mode, + apps: settings.apps, + }; + } + + var showMenu = function() { + var settings = getSettings(); + var menu = { + '': { 'title': 'Backswipe' }, + '< Back': () => { + load(); + E.showMenu(); + }, + 'Mode': { + value: settings.mode, + format: v => v, + onchange: v => { + settings.mode = v; + }, + options: ['blacklist', 'whitelist', 'on', 'disabled'] + }, + 'App List': { + value: '', + format: v => v, + onchange: v => { + showAppSubMenu(); + } + } + }; + + E.showMenu(menu); + } + + var showAppSubMenu = function() { + var menu = { + '': { 'title': 'Backswipe' }, + '< Back': () => { + showMenu(); + }, + 'Add App': () => { + showAppList(); + } + }; + settings.apps.forEach(app => { + menu[app.app] = () => { + settings.apps.splice(settings.apps.indexOf(app), 1); + } + saveSettings(settings); + }); + E.showMenu(menu); + } + + var showAppList = function() { + var apps = getApps(); + var menu = { + '': { 'title': 'Backswipe' }, + '< Back': () => { + showMenu(); + } + }; + apps.forEach(app => { + menu[app] = () => { + settings.apps.push(app); + saveSettings(settings); + showAppSubMenu(); + } + }); + E.showMenu(menu); + } + + loadSettings(); + showMenu(); +}) \ No newline at end of file