From 18f612a91394e83ba1ccee25bd775959fcd9ce39 Mon Sep 17 00:00:00 2001 From: kdmukai Date: Mon, 31 Oct 2022 13:08:55 -0500 Subject: [PATCH 1/2] Splits symbols for passphrases across two keyboards --- src/seedsigner/gui/keyboard.py | 15 ++++-- src/seedsigner/gui/screens/seed_screens.py | 55 +++++++++++++++++----- 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/seedsigner/gui/keyboard.py b/src/seedsigner/gui/keyboard.py index 09169903..fa5070eb 100644 --- a/src/seedsigner/gui/keyboard.py +++ b/src/seedsigner/gui/keyboard.py @@ -39,6 +39,12 @@ class Keyboard: "font": COMPACT_KEY_FONT, "size": 1, } + KEY_SPACE_2 = { + "code": "SPACE", + "letter": "space", + "font": COMPACT_KEY_FONT, + "size": 2, + } KEY_SPACE_3 = { "code": "SPACE", "letter": "space", @@ -117,6 +123,7 @@ class Keyboard: rect_color = self.keyboard.deactivated_background_color font_color = "#333" # Show the letter but render as gray outline_color = self.keyboard.deactivated_background_color + if self.is_selected: # Inactive, selected just gets highlighted outline outline_color = self.keyboard.highlight_color @@ -125,11 +132,12 @@ class Keyboard: font_color = "black" else: if self.is_additional_key: - # rect_color = "#111" - rect_color = self.keyboard.background_color + rect_color = "#000" + font_color = "#999" + # rect_color = self.keyboard.background_color else: rect_color = self.keyboard.background_color - font_color = "#e8e8e8" + font_color = "#e8e8e8" self.keyboard.draw.rounded_rectangle( ( @@ -186,6 +194,7 @@ class Keyboard: self.auto_wrap = auto_wrap self.background_color = GUIConstants.BUTTON_BACKGROUND_COLOR self.deactivated_background_color = GUIConstants.BACKGROUND_COLOR + self.additional_key_deactivated_background_color = GUIConstants.BACKGROUND_COLOR self.highlight_color = highlight_color # Does the specified layout work? diff --git a/src/seedsigner/gui/screens/seed_screens.py b/src/seedsigner/gui/screens/seed_screens.py index 84b05885..e4dd8132 100644 --- a/src/seedsigner/gui/screens/seed_screens.py +++ b/src/seedsigner/gui/screens/seed_screens.py @@ -622,7 +622,8 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): KEYBOARD__LOWERCASE_BUTTON_TEXT = "abc" KEYBOARD__UPPERCASE_BUTTON_TEXT = "ABC" KEYBOARD__DIGITS_BUTTON_TEXT = "123" - KEYBOARD__SYMBOLS_BUTTON_TEXT = "!@#" + KEYBOARD__SYMBOLS_1_BUTTON_TEXT = "!@#" + KEYBOARD__SYMBOLS_2_BUTTON_TEXT = "*[]" def __post_init__(self): @@ -631,7 +632,9 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): keys_lower = "abcdefghijklmnopqrstuvwxyz" keys_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" keys_number = "0123456789" - keys_symbol = "!\"#$%&'()*+,=./;:<>?@[]|-_`~" + keys_symbol_1 = """!@#$%&();:,.-+='"?""" + keys_symbol_2 = """^*[]{}_\\|<>/`~""" + # Set up the keyboard params self.right_panel_buttons_width = 56 @@ -702,11 +705,11 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): render_now=False ) - self.keyboard_symbols = Keyboard( + self.keyboard_symbols_1 = Keyboard( draw=self.renderer.draw, - charset=keys_symbol, + charset=keys_symbol_1, rows=4, - cols=max_cols, + cols=6, rect=( GUIConstants.COMPONENT_PADDING, keyboard_start_y, @@ -714,7 +717,28 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): self.canvas_height - GUIConstants.EDGE_PADDING ), additional_keys=[ - Keyboard.KEY_SPACE_4, + Keyboard.KEY_SPACE_2, + Keyboard.KEY_CURSOR_LEFT, + Keyboard.KEY_CURSOR_RIGHT, + Keyboard.KEY_BACKSPACE + ], + auto_wrap=[Keyboard.WRAP_LEFT, Keyboard.WRAP_RIGHT], + render_now=False + ) + + self.keyboard_symbols_2 = Keyboard( + draw=self.renderer.draw, + charset=keys_symbol_2, + rows=4, + cols=6, + rect=( + GUIConstants.COMPONENT_PADDING, + keyboard_start_y, + self.canvas_width - GUIConstants.COMPONENT_PADDING - self.right_panel_buttons_width, + self.canvas_height - GUIConstants.EDGE_PADDING + ), + additional_keys=[ + Keyboard.KEY_SPACE_2, Keyboard.KEY_CURSOR_LEFT, Keyboard.KEY_CURSOR_RIGHT, Keyboard.KEY_BACKSPACE @@ -824,8 +848,10 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): # Return to the same button2 keyboard, if applicable if cur_keyboard == self.keyboard_digits: cur_button2_text = self.KEYBOARD__DIGITS_BUTTON_TEXT - elif cur_keyboard == self.keyboard_symbols: - cur_button2_text = self.KEYBOARD__SYMBOLS_BUTTON_TEXT + elif cur_keyboard == self.keyboard_symbols_1: + cur_button2_text = self.KEYBOARD__SYMBOLS_1_BUTTON_TEXT + elif cur_keyboard == self.keyboard_symbols_2: + cur_button2_text = self.KEYBOARD__SYMBOLS_2_BUTTON_TEXT if cur_button1_text == self.KEYBOARD__LOWERCASE_BUTTON_TEXT: self.keyboard_abc.set_selected_key_indices(x=cur_keyboard.selected_key["x"], y=cur_keyboard.selected_key["y"]) @@ -862,10 +888,15 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): self.keyboard_digits.set_selected_key_indices(x=cur_keyboard.selected_key["x"], y=cur_keyboard.selected_key["y"]) cur_keyboard = self.keyboard_digits cur_keyboard.render_keys() - cur_button2_text = self.KEYBOARD__SYMBOLS_BUTTON_TEXT - else: - self.keyboard_symbols.set_selected_key_indices(x=cur_keyboard.selected_key["x"], y=cur_keyboard.selected_key["y"]) - cur_keyboard = self.keyboard_symbols + cur_button2_text = self.KEYBOARD__SYMBOLS_1_BUTTON_TEXT + elif cur_button2_text == self.KEYBOARD__SYMBOLS_1_BUTTON_TEXT: + self.keyboard_symbols_1.set_selected_key_indices(x=cur_keyboard.selected_key["x"], y=cur_keyboard.selected_key["y"]) + cur_keyboard = self.keyboard_symbols_1 + cur_keyboard.render_keys() + cur_button2_text = self.KEYBOARD__SYMBOLS_2_BUTTON_TEXT + elif cur_button2_text == self.KEYBOARD__SYMBOLS_2_BUTTON_TEXT: + self.keyboard_symbols_2.set_selected_key_indices(x=cur_keyboard.selected_key["x"], y=cur_keyboard.selected_key["y"]) + cur_keyboard = self.keyboard_symbols_2 cur_keyboard.render_keys() cur_button2_text = self.KEYBOARD__DIGITS_BUTTON_TEXT cur_keyboard.render_keys() From ceda157cfc3be37710ccaaa4fb1f87574593eb16 Mon Sep 17 00:00:00 2001 From: kdmukai Date: Mon, 31 Oct 2022 13:39:09 -0500 Subject: [PATCH 2/2] Minor cleanup --- src/seedsigner/gui/keyboard.py | 1 - src/seedsigner/gui/screens/seed_screens.py | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/seedsigner/gui/keyboard.py b/src/seedsigner/gui/keyboard.py index fa5070eb..7e1dc6c4 100644 --- a/src/seedsigner/gui/keyboard.py +++ b/src/seedsigner/gui/keyboard.py @@ -134,7 +134,6 @@ class Keyboard: if self.is_additional_key: rect_color = "#000" font_color = "#999" - # rect_color = self.keyboard.background_color else: rect_color = self.keyboard.background_color font_color = "#e8e8e8" diff --git a/src/seedsigner/gui/screens/seed_screens.py b/src/seedsigner/gui/screens/seed_screens.py index e4dd8132..0b06afae 100644 --- a/src/seedsigner/gui/screens/seed_screens.py +++ b/src/seedsigner/gui/screens/seed_screens.py @@ -632,7 +632,12 @@ class SeedAddPassphraseScreen(BaseTopNavScreen): keys_lower = "abcdefghijklmnopqrstuvwxyz" keys_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" keys_number = "0123456789" + + # Present the most common/puncutation-related symbols & the most human-friendly + # symbols first (limited to 18 chars). keys_symbol_1 = """!@#$%&();:,.-+='"?""" + + # Isolate the more math-oriented or just uncommon symbols keys_symbol_2 = """^*[]{}_\\|<>/`~"""