Skip to content

Commit

Permalink
Merge pull request #397 from henrikth93/henrikth93-orientation-reload…
Browse files Browse the repository at this point in the history
…-keys

#362 Changed the expanded keyboard for more languages
  • Loading branch information
andrewtavis authored Mar 31, 2024
2 parents 00035fd + 63d5ce1 commit f3862d8
Show file tree
Hide file tree
Showing 17 changed files with 154 additions and 109 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Emojis for the following are chosen based on [gitmoji](https://gitmoji.dev/).
### 🎨 Design Changes

- iPad keyboards are now more reflective of their system keyboard counterparts for devices above a certain width ([#33](https://github.com/scribe-org/Scribe-iOS/issues/33), [#352](https://github.com/scribe-org/Scribe-iOS/issues/352)).
- Vertical spacing between keys on iPads has been decreased so that keys are more square and thus more in line with system keyboards.

### 🐞 Bug Fixes

Expand Down
11 changes: 7 additions & 4 deletions Keyboards/KeyboardsBase/InterfaceVariables.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ var letterKeyWidth = CGFloat(0)
var numSymKeyWidth = CGFloat(0)
var isFirstKeyboardLoad = false
var disableAccentCharacters = false
// Constants for scaling key widths and heights.
// Constants and variables for scaling key widths and heights.
let scalarAlternatesBtnYPad = 0.2
let scalarAlternatesBtnYPhone = 0.15
let scalarCommandKeyCornerRadiusLandscapeViewPad = 7.5
Expand All @@ -56,13 +56,16 @@ let scalarKeyCornerRadiusPad = 9.0
let scalarKeyCornerRadiusPhone = 6.0
let scalarFontPad = 0.475
let scalarFontPhone = 0.435
let scalarIndentKeyWidth = 1.65
let scalarLetterNumSymKeyWidth = 0.9
let scalarLetterNumSymKeyWidthLandscapeViewPad = 1.2
let scalarLetterNumSymKeyWidthLandscapeViewPhone = 1.5
var scalarSpecialKeysWidth = disableAccentCharacters ? 2.2 : 1.0
let scalarIndentKeyWidth = 1.7
let scalarShiftKeyWidth = 1.4
var scalarReturnKeyWidth = disableAccentCharacters ? 2.2 : 1.0
var scalarShiftKeyWidth = 1.4
var scalarRightShiftKeyWidth = 2.2
var scalarSpecialKeysWidth = disableAccentCharacters ? 2.2 : 1.0
var scalarDeleteKeyWidth = disableAccentCharacters ? 2.2 : 1.0
var scalarCapsLockKeyWidth = 1.8

// Keyboard elements.
var spaceBar = String()
Expand Down
31 changes: 22 additions & 9 deletions Keyboards/KeyboardsBase/KeyboardKeys.swift
Original file line number Diff line number Diff line change
Expand Up @@ -267,31 +267,44 @@ class KeyboardKey: UIButton {
/// Adjusts the width of a key if it's one of the special characters on the iPad keyboard.
func adjustPadKeyWidth() {
if usingExpandedKeyboard {
scalarSpecialKeysWidth = (disableAccentCharacters && keyboardState != .symbols) ? 2.2 : 1.0
scalarReturnKeyWidth = (disableAccentCharacters && keyboardState != .symbols) ? 2.2 : 1.0
scalarCapsLockKeyWidth = 1.3
scalarDeleteKeyWidth = 1.65
scalarReturnKeyWidth = 1.3
scalarShiftKeyWidth = 1.5
scalarSpecialKeysWidth = 1.0

if key == "ABC" || key == "АБВ" {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * 1).isActive = true
} else if ["delete", "#+=", "selectKeyboard", SpecialKeys.capsLock].contains(key) {
} else if ["#+=", "selectKeyboard"].contains(key) {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarSpecialKeysWidth).isActive = true
} else if ["delete"].contains(key) {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarDeleteKeyWidth).isActive = true
} else if [SpecialKeys.capsLock].contains(key) {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarSpecialKeysWidth).isActive = true // *2 scalarSpecialKeysWidth = 1
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarCapsLockKeyWidth).isActive = true
} else if [SpecialKeys.indent].contains(key) {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarIndentKeyWidth).isActive = true // scalarIndentKeyWidth
} else if ["shift"].contains(key) {
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarIndentKeyWidth).isActive = true
} else if ["shift"].contains(key) && idx == 0 {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarShiftKeyWidth).isActive = true // scalarShiftKeyWidth
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarShiftKeyWidth).isActive = true
} else if ["shift"].contains(key) && (idx > 0) {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarRightShiftKeyWidth).isActive = true
} else if ["return"].contains(key) {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarReturnKeyWidth).isActive = true // scalarReturnKeyWidth
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarReturnKeyWidth).isActive = true
} else if ["123", ".?123", "return", "hideKeyboard"].contains(key) {
if key == "return"
&& (controllerLanguage == "Portuguese" || controllerLanguage == "Italian" || commandState == .translate)
&& row == 1
&& DeviceType.isPad
{
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * 1.5).isActive = true
widthAnchor.constraint(equalToConstant: numSymKeyWidth * scalarReturnKeyWidth).isActive = true
} else {
layer.setValue(true, forKey: "isSpecial")
widthAnchor.constraint(equalToConstant: numSymKeyWidth * 1).isActive = true
Expand Down
60 changes: 39 additions & 21 deletions Keyboards/KeyboardsBase/KeyboardViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,19 @@ class KeyboardViewController: UIInputViewController {
keyboardHeight = 270
}
} else if DeviceType.isPad {
if isLandscapeView {
keyboardHeight = 420
// Expanded keyboard on larger iPads can be higher.
if UIScreen.main.bounds.width > 768 {
if isLandscapeView {
keyboardHeight = 430
} else {
keyboardHeight = 360
}
} else {
keyboardHeight = 340
if isLandscapeView {
keyboardHeight = 420
} else {
keyboardHeight = 340
}
}
}

Expand Down Expand Up @@ -1603,6 +1612,7 @@ class KeyboardViewController: UIInputViewController {
}
if DeviceType.isPad
&& key == "a"
&& !usingExpandedKeyboard
&& (controllerLanguage == "Portuguese"
|| controllerLanguage == "Italian"
|| commandState == .translate)
Expand All @@ -1612,29 +1622,23 @@ class KeyboardViewController: UIInputViewController {
}
if DeviceType.isPad
&& key == "@"
&& !usingExpandedKeyboard
&& (controllerLanguage == "Portuguese"
|| controllerLanguage == "Italian"
|| commandState == .translate)
{
leftPadding = keyWidth / 3
addPadding(to: stackView1, width: leftPadding, key: "@")
}
if DeviceType.isPad
&& key == "$"
&& controllerLanguage == "Italian"
{
leftPadding = keyWidth / 3
addPadding(to: stackView1, width: leftPadding, key: "$")
}
if DeviceType.isPad
&& key == ""
&& !usingExpandedKeyboard
&& (controllerLanguage == "Portuguese"
|| commandState == .translate)
{
leftPadding = keyWidth / 3
addPadding(to: stackView1, width: leftPadding, key: "")
}
// }

keyboardKeys.append(btn)
if !usingExpandedKeyboard {
Expand Down Expand Up @@ -1954,16 +1958,30 @@ class KeyboardViewController: UIInputViewController {
view?.isLayoutMarginsRelativeArrangement = true

// Set edge insets for stack views to provide vertical key spacing.
if view == stackViewNum {
view?.layoutMargins = UIEdgeInsets(top: 3, left: 0, bottom: 4, right: 0)
} else if view == stackView0 {
view?.layoutMargins = UIEdgeInsets(top: 3, left: 0, bottom: 8, right: 0)
} else if view == stackView1 {
view?.layoutMargins = UIEdgeInsets(top: 5, left: 0, bottom: 6, right: 0)
} else if view == stackView2 {
view?.layoutMargins = UIEdgeInsets(top: 5, left: 0, bottom: 6, right: 0)
} else if view == stackView3 {
view?.layoutMargins = UIEdgeInsets(top: 6, left: 0, bottom: 5, right: 0)
if DeviceType.isPad {
if view == stackViewNum {
view?.layoutMargins = UIEdgeInsets(top: 4, left: 0, bottom: 4, right: 0)
} else if view == stackView0 {
view?.layoutMargins = UIEdgeInsets(top: 2, left: 0, bottom: 6, right: 0)
} else if view == stackView1 {
view?.layoutMargins = UIEdgeInsets(top: 3, left: 0, bottom: 4, right: 0)
} else if view == stackView2 {
view?.layoutMargins = UIEdgeInsets(top: 3, left: 0, bottom: 4, right: 0)
} else if view == stackView3 {
view?.layoutMargins = UIEdgeInsets(top: 4, left: 0, bottom: 3, right: 0)
}
} else {
if view == stackViewNum {
view?.layoutMargins = UIEdgeInsets(top: 3, left: 0, bottom: 4, right: 0)
} else if view == stackView0 {
view?.layoutMargins = UIEdgeInsets(top: 3, left: 0, bottom: 8, right: 0)
} else if view == stackView1 {
view?.layoutMargins = UIEdgeInsets(top: 5, left: 0, bottom: 6, right: 0)
} else if view == stackView2 {
view?.layoutMargins = UIEdgeInsets(top: 5, left: 0, bottom: 6, right: 0)
} else if view == stackView3 {
view?.layoutMargins = UIEdgeInsets(top: 6, left: 0, bottom: 5, right: 0)
}
}
}

Expand Down
12 changes: 6 additions & 6 deletions Keyboards/LanguageKeyboards/Danish/DAInterfaceVariables.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,18 @@ public enum DanishKeyboardConstants {

// Expanded iPad keyboard layouts for wider devices.
static let letterKeysPadExpanded = [
["$", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "'", "delete"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "å", "@", "*"],
["kr", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "´", "delete"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "å", "@", "¨"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", "æ", "ø", "'", "return"],
["shift", "<", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "shift"],
["shift", "*", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "shift"],
["selectKeyboard", ".?123", "space", ".?123", "hideKeyboard"], // "microphone", "scribble"
]

static let symbolKeysPadExpanded = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "redo"
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|", ""],
[SpecialKeys.capsLock, "°", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "", "?", "!", "", "'", "\"", "_", "", ",", ".", "-", "shift"], // "redo"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
12 changes: 6 additions & 6 deletions Keyboards/LanguageKeyboards/English/ENInterfaceVariables.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,18 @@ public enum EnglishKeyboardConstants {

// Expanded iPad keyboard layouts for wider devices.
static let letterKeysPadExpanded = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "delete"],
["~", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "delete"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "return"],
["shift", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "shift"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", ":", ";", "'", "return"],
["shift", "-", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "shift"],
["selectKeyboard", ".?123", "space", ".?123", "hideKeyboard"], // "microphone", "scribble"
]

static let symbolKeysPadExpanded = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "~"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "redo"
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "", "~", "°"],
[SpecialKeys.capsLock, "-", "\\", ":", ";", "(", ")", "&", "@", "$", "£", "¥", "", "return"], // "undo"
["shift", "", "?", "!", "", "'", "\"", "|", "_", ".", ",", "/", "shift"], // "redo"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,18 @@ public enum FrenchKeyboardConstants {

// Expanded iPad keyboard layouts for wider devices.
static let letterKeysPadExpanded = [
["@", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "°", "", "delete"],
[SpecialKeys.indent, "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", "*"],
[SpecialKeys.capsLock, "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "", "%", "return"],
["shift", "/", "w", "x", "c", "v", "b", "n", ",", ".", "<", ">", "shift"],
["@", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ç", "à", "delete"],
[SpecialKeys.indent, "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "+", "*"],
[SpecialKeys.capsLock, "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "ù", "#", "return"],
["shift", "/", "w", "x", "c", "v", "b", "n", ":", "-", ",", ".", "shift"],
["selectKeyboard", ".?123", "space", ".?123", "hideKeyboard"], // "microphone", "scribble"
]

static let symbolKeysPadExpanded = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|", "§"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "redo"
[SpecialKeys.indent, "\"", "|", "§", "[", "]", "{", "}", "-", "%", "=", "^", "+", "*"],
[SpecialKeys.capsLock, "/", "", "_", "(", ")", "&", "$", "£", "¥", "", "@", "#", "return"], // "undo"
["shift", "'", "?", "!", "~", "", "°", ";", ":", "-", ",", ".", "shift"], // "redo"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public enum FrenchQWERTYKeyboardConstants {
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|", "~"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "redo"
["shift", "", "?", "!", "", "°", "'", "\"", "_", ",", ".", "", "shift"], // "redo"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
14 changes: 7 additions & 7 deletions Keyboards/LanguageKeyboards/German/DEInterfaceVariables.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,23 +85,23 @@ public enum GermanKeyboardConstants {
["^", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", "´", "delete"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "+", "*"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "#", "return"],
["shift", "<", "y", "x", "c", "v", "b", "n", "m", ",", ".", "-", "shift"],
["shift", "'", "y", "x", "c", "v", "b", "n", "m", "-", ",", ".", "shift"],
["selectKeyboard", ".?123", "space", ".?123", "hideKeyboard"], // "microphone", "scribble"
]

static let letterKeysPadExpandedDisableAccents = [
["^", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", "´", "delete"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "+", "*"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", "#", "return"],
["shift", "<", "y", "x", "c", "v", "b", "n", "m", ",", ".", "-", "shift"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "=", "+", "*"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", "/", "@", "#", "return"],
["shift", "'", "y", "x", "c", "v", "b", "n", "m", "-", ",", ".", "shift"],
["selectKeyboard", ".?123", "space", ".?123", "hideKeyboard"], // "microphone", "scribble"
]

static let symbolKeysPadExpanded = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|", "§"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "redo"
[SpecialKeys.indent, "\"", "|", "§", "[", "]", "{", "}", "", "%", "^", "=", "+", "*"],
[SpecialKeys.capsLock, ":", ";", "(", ")", "&", "$", "£", "¥", "", "/", "@", "#", "return"], // "undo"
["shift", "'", "?", "!", "~", "", "°", "", "_", "-", ",", ".", "shift"], // "redo"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
8 changes: 4 additions & 4 deletions Keyboards/LanguageKeyboards/Hebrew/HEInterfaceVariables.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,10 @@ public enum HebrewKeyboardConstants {
]

static let symbolKeysPadExpanded = [
["±", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "redo"
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|", ""],
[SpecialKeys.capsLock, "°", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "", "return"], // "undo"
["shift", "", "?", "!", "~", "", "'", "\"", "_", ",", ".", "-", "shift"], // "redo"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,18 @@ public enum ItalianKeyboardConstants {

// Expanded iPad keyboard layouts for wider devices.
static let letterKeysPadExpanded = [
["\\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "'", "ì", "delete"],
["\\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "", "ì", "delete"],
[SpecialKeys.indent, "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "è", "+", "*"],
[SpecialKeys.capsLock, "a", "s", "d", "f", "g", "h", "j", "k", "l", "ò", "à", "ù", "return"],
["shift", "<", "z", "x", "c", "v", "b", "n", "m", ",", ".", ">", "shift"],
["shift", "'", "z", "x", "c", "v", "b", "n", "m", "-", ",", ".", "shift"],
["selectKeyboard", ".?123", "space", ".?123", "hideKeyboard"], // "microphone", "scribble"
]

static let symbolKeysPadExpanded = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "<", ">", "delete"],
[SpecialKeys.indent, "[", "]", "{", "}", "#", "%", "^", "*", "+", "=", "\"", "|", "§"],
[SpecialKeys.capsLock, "-", "/", ":", ";", "(", ")", "$", "&", "@", "£", "¥", "~", "return"], // "undo"
["shift", "...", ".", ",", "?", "!", "'", "\"", "_", ""], // "shift"
[SpecialKeys.capsLock, "°", "/", ":", ";", "(", ")", "&", "@", "$", "£", "¥", "~", "return"], // "undo"
["shift", "", "?", "!", "", "'", "\"", "_", "", "-", ",", ".", "shift"], // "shift"
["selectKeyboard", "ABC", "space", "ABC", "hideKeyboard"], // "microphone", "scribble"
]

Expand Down
Loading

0 comments on commit f3862d8

Please sign in to comment.