diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog index f60933fb8..1cd75a189 100644 --- a/apps/kbmulti/ChangeLog +++ b/apps/kbmulti/ChangeLog @@ -8,3 +8,5 @@ edge versions of 2v18. Falls back on `Bangle.on()` for backwards compatability. 0.08: Minor code improvements +0.09: Recapitalise when returning to the start, and add setting to vibrate on + interaction diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 2f0a1a9ae..bdd43d7aa 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -5,11 +5,13 @@ exports.input = function(options) { var text = options.text; if ("string"!=typeof text) text=""; - var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } - if (settings.charTimeout===undefined) { settings.charTimeout = 500; } - if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } - if (settings.autoLowercase===undefined) { settings.autoLowercase = true; } + var settings = Object.assign({ + firstLaunch: true, + showHelpBtn: true, + charTimeout: 500, + autoLowercase: true, + vibrate: false, + }, require('Storage').readJSON("kbmulti.settings.json", true)); var fontSize = "6x15"; var Layout = require("Layout"); @@ -28,25 +30,25 @@ exports.input = function(options) { var caps = true; var layout; var btnWidth = g.getWidth()/3; - + function getMoveChar(){ return "\x00\x0B\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00@\x1F\xE1\x00\x10\x00\x10\x01\x0F\xF0\x04\x01\x00"; } - + function getMoreChar(){ return "\x00\x0B\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDB\x1B`\x00\x00\x00"; } - function getCursorChar(){ - return "\x00\x0B\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xAA\xAA\x80"; } + return "\x00\x0B\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xAA\xAA\x80"; + } function displayText(hideMarker) { layout.clear(layout.text); //let charsBeforeCursor = textIndex; let charsAfterCursor = Math.min(text.length - textIndex, (textWidth)/2); - + let start = textIndex - Math.ceil(textWidth - charsAfterCursor); let startMore = false; @@ -76,7 +78,9 @@ exports.input = function(options) { deactivateTimeout(charTimeout); if (textIndex > -1){ text = text.slice(0, textIndex) + text.slice(textIndex + 1); - if (textIndex > -1) textIndex --; + textIndex--; + if (textIndex == -1 && !caps) + setCaps() newCharacter(); } } @@ -96,7 +100,12 @@ exports.input = function(options) { charIndex = 0; } + function onInteract() { + if (settings.vibrate) Bangle.buzz(20); + } + function onKeyPad(key) { + onInteract(); var retire = 0; deactivateTimeout(charTimeout); // work out which char was pressed @@ -110,12 +119,12 @@ exports.input = function(options) { var newLetter = letters[charCurrent][charIndex]; let pre = text.slice(0, textIndex); let post = text.slice(textIndex, text.length); - + text = pre + (caps ? newLetter.toUpperCase() : newLetter.toLowerCase()) + post; if(retire) retireCurrent(); - + // set a timeout charTimeout = setTimeout(function() { charTimeout = undefined; @@ -125,7 +134,7 @@ exports.input = function(options) { displayText(true); } - function retireCurrent(why) { + function retireCurrent() { if (caps && settings.autoLowercase) setCaps(); } @@ -133,6 +142,7 @@ exports.input = function(options) { var moveMode = false; function onSwipe(dirLeftRight, dirUpDown) { + onInteract(); if (dirUpDown == -1) { moveMode = !moveMode; displayText(false); diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json index b8fa74a45..28e2bbd38 100644 --- a/apps/kbmulti/metadata.json +++ b/apps/kbmulti/metadata.json @@ -1,6 +1,6 @@ { "id": "kbmulti", "name": "Multitap keyboard", - "version": "0.08", + "version": "0.09", "description": "A library for text input via multitap/T9 style keypad", "icon": "app.png", "type":"textinput", diff --git a/apps/kbmulti/settings.js b/apps/kbmulti/settings.js index 08dbb1925..a39aa2e6c 100644 --- a/apps/kbmulti/settings.js +++ b/apps/kbmulti/settings.js @@ -1,21 +1,26 @@ (function(back) { function settings() { - var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } - if (settings.charTimeout===undefined) { settings.charTimeout = 500; } - if (settings.autoLowercase===undefined) { settings.autoLowercase = true; } + var settings = Object.assign({ + showHelpBtn: true, + charTimeout: 500, + autoLowercase: true, + vibrate: false, + }, require('Storage').readJSON("kbmulti.settings.json", true)); + return settings; } - + function updateSetting(setting, value) { var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; settings[setting] = value; require('Storage').writeJSON("kbmulti.settings.json", settings); } - + var mainmenu = { - "" : { "title" : /*LANG*/"Multitap keyboard" }, - "< Back" : back, + "" : { + "title" : /*LANG*/"Multitap keyboard", + "back": back, + }, /*LANG*/'Character selection timeout [ms]': { value: settings().charTimeout, min: 200, max: 1500, step : 50, @@ -26,6 +31,10 @@ value: !!settings().autoLowercase, onchange: v => updateSetting("autoLowercase", v) }, + /*LANG*/'Vibrate on keypress': { + value: !!settings().vibrate, + onchange: v => updateSetting("vibrate", v) + }, /*LANG*/'Show help button?': { value: !!settings().showHelpBtn, onchange: v => updateSetting("showHelpBtn", v)