Skip to content

Commit d16b38f

Browse files
Wallet type as buttons
1 parent 50b04e3 commit d16b38f

1 file changed

Lines changed: 63 additions & 39 deletions

File tree

  • internal_filesystem/apps/com.lightningpiggy.displaywallet/assets

internal_filesystem/apps/com.lightningpiggy.displaywallet/assets/displaywallet.py

Lines changed: 63 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,24 @@
1919
wallet = None
2020
receive_qr_data = None
2121

22+
# Settings screen implementation
2223
# Settings screen implementation
2324
class SettingsScreen():
2425
def __init__(self):
25-
#super().__init__(None)
2626
self.prefs = mpos.config.SharedPreferences("com.lightningpiggy.displaywallet")
2727
self.settings = [
28-
{"title": "Wallet Type", "key": "wallet_type", "value_label": None},
29-
{"title": "LNBits URL", "key": "lnbits_url", "value_label": None},
30-
{"title": "LNBits Read/Invoice Key", "key": "lnbits_readkey", "value_label": None},
31-
{"title": "Static receive code", "key": "lnbits_static_receive_code", "value_label": None},
32-
{"title": "NWC URL", "key": "nwc_url", "value_label": None},
28+
{"title": "Wallet Type", "key": "wallet_type", "value_label": None, "cont": None},
29+
{"title": "LNBits URL", "key": "lnbits_url", "value_label": None, "cont": None},
30+
{"title": "LNBits Read/Invoice Key", "key": "lnbits_readkey", "value_label": None, "cont": None},
31+
{"title": "Static receive code", "key": "lnbits_static_receive_code", "value_label": None, "cont": None},
32+
{"title": "NWC URL", "key": "nwc_url", "value_label": None, "cont": None},
3333
]
3434
self.keyboard = None
3535
self.textarea = None
3636
self.msgbox = None
37+
self.radio_group = None
3738
self.screen = self.create_ui()
39+
self.update_setting_visibility() # Initialize visibility based on saved wallet_type
3840

3941
def create_ui(self):
4042
screen = lv.obj()
@@ -51,17 +53,15 @@ def create_ui(self):
5153
setting_cont.set_width(lv.pct(100))
5254
setting_cont.set_height(lv.SIZE_CONTENT)
5355
setting_cont.set_style_border_width(1, 0)
54-
#setting_cont.set_style_border_color(lv.color_hex(0xCCCCCC), 0)
5556
setting_cont.set_style_border_side(lv.BORDER_SIDE.BOTTOM, 0)
5657
setting_cont.set_style_pad_all(8, 0)
5758
setting_cont.add_flag(lv.obj.FLAG.CLICKABLE)
59+
setting["cont"] = setting_cont # Store container reference for visibility control
5860

5961
# Title label (bold, larger)
6062
title = lv.label(setting_cont)
6163
title.set_text(setting["title"])
6264
title.set_style_text_font(lv.font_montserrat_16, 0)
63-
#title.set_style_text_color(lv.color_hex(0x000000), 0)
64-
#title.set_style_text_decor(lv.TEXT_DECOR.NONE, 0)
6565
title.set_pos(0, 0)
6666

6767
# Value label (smaller, below title)
@@ -82,37 +82,39 @@ def create_ui(self):
8282
self.keyboard.set_size(lv.pct(100), lv.pct(40))
8383
self.keyboard.align(lv.ALIGN.BOTTOM_MID, 0, 0)
8484
self.keyboard.add_flag(lv.obj.FLAG.HIDDEN)
85-
self.keyboard.add_event_cb(self.keyboard_cb,lv.EVENT.READY,None)
86-
self.keyboard.add_event_cb(self.keyboard_cb,lv.EVENT.CANCEL,None)
87-
#self.keyboard.add_event_cb(self.keyboard_value_changed_cb,lv.EVENT.VALUE_CHANGED,None)
85+
self.keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.READY, None)
86+
self.keyboard.add_event_cb(self.keyboard_cb, lv.EVENT.CANCEL, None)
8887
return screen
8988

9089
def hide_keyboard(self, event=None):
9190
print("hide_keyboard: hiding keyboard")
9291
self.keyboard.add_flag(lv.obj.FLAG.HIDDEN)
9392

9493
def show_keyboard(self, event):
95-
# Show keyboard:
9694
print("showing keyboard")
9795
self.keyboard.remove_flag(lv.obj.FLAG.HIDDEN)
9896
self.keyboard.set_textarea(self.textarea)
9997

10098
def keyboard_cb(self, event=None):
10199
print("keyboard_cb: Keyboard event triggered")
102-
code=event.get_code()
103-
if code==lv.EVENT.READY or code==lv.EVENT.CANCEL:
100+
code = event.get_code()
101+
if code == lv.EVENT.READY or code == lv.EVENT.CANCEL:
104102
print("keyboard_cb: READY or CANCEL or RETURN clicked, hiding keyboard")
105103
self.hide_keyboard()
106-
107-
def keyboard_value_changed_cb_unused(self, event):
108-
print("keyboard value changed!")
109-
print(f"event: code={event.get_code()}, target={event.get_target()}, user_data={event.get_user_data()}, param={event.get_param()}") # event: code=32, target=<Blob>, user_data=<Blob>, param=<Blob>
110-
button = self.keyboard.get_selected_button()
111-
text = self.keyboard.get_button_text(button)
112-
#print(f"button {button} and text {text}")
113-
if text == lv.SYMBOL.NEW_LINE:
114-
print("Newline key pressed, hiding keyboard...")
115-
self.hide_keyboard()
104+
105+
def update_setting_visibility(self):
106+
wallet_type = self.prefs.get_string("wallet_type", "lnbits")
107+
for setting in self.settings:
108+
if setting["key"].startswith("lnbits_"):
109+
if wallet_type != "lnbits":
110+
setting["cont"].add_flag(lv.obj.FLAG.HIDDEN)
111+
else:
112+
setting["cont"].remove_flag(lv.obj.FLAG.HIDDEN)
113+
elif setting["key"].startswith("nwc_"):
114+
if wallet_type != "nwc":
115+
setting["cont"].add_flag(lv.obj.FLAG.HIDDEN)
116+
else:
117+
setting["cont"].remove_flag(lv.obj.FLAG.HIDDEN)
116118

117119
def open_edit_popup(self, setting):
118120
# Close existing msgbox and keyboard if open
@@ -136,14 +138,27 @@ def open_edit_popup(self, setting):
136138
content.set_style_pad_all(10, 0)
137139
content.set_flex_flow(lv.FLEX_FLOW.COLUMN)
138140

139-
# Textarea for editing
140-
self.textarea = lv.textarea(content)
141-
self.textarea.set_width(lv.pct(100))
142-
self.textarea.set_height(lv.SIZE_CONTENT)
143-
self.textarea.set_text(self.prefs.get_string(setting["key"], ""))
144-
self.textarea.add_event_cb(self.show_keyboard, lv.EVENT.CLICKED, None)
145-
self.textarea.add_event_cb(self.show_keyboard, lv.EVENT.FOCUSED, None)
146-
self.textarea.add_event_cb(self.hide_keyboard, lv.EVENT.DEFOCUSED, None)
141+
if setting["key"] == "wallet_type":
142+
# Create radiobuttons for wallet_type
143+
self.radio_group = lv.buttonmatrix(content)
144+
self.radio_group.set_width(lv.pct(100))
145+
buttons = ["LNBits", "Nostr Wallet Connect"]
146+
self.radio_group.set_map(buttons + [""]) # Add empty string for matrix termination
147+
self.radio_group.set_button_ctrl(0, lv.buttonmatrix.CTRL.CHECKABLE)
148+
self.radio_group.set_button_ctrl(1, lv.buttonmatrix.CTRL.CHECKABLE)
149+
current_wallet = self.prefs.get_string("wallet_type", "lnbits")
150+
selected_idx = 0 if current_wallet == "lnbits" else 1
151+
self.radio_group.set_button_ctrl(selected_idx, lv.buttonmatrix.CTRL.CHECKED)
152+
self.radio_group.set_one_checked(True)
153+
else:
154+
# Textarea for other settings
155+
self.textarea = lv.textarea(content)
156+
self.textarea.set_width(lv.pct(100))
157+
self.textarea.set_height(lv.SIZE_CONTENT)
158+
self.textarea.set_text(self.prefs.get_string(setting["key"], ""))
159+
self.textarea.add_event_cb(self.show_keyboard, lv.EVENT.CLICKED, None)
160+
self.textarea.add_event_cb(self.show_keyboard, lv.EVENT.FOCUSED, None)
161+
self.textarea.add_event_cb(self.hide_keyboard, lv.EVENT.DEFOCUSED, None)
147162

148163
# Button container
149164
btn_cont = lv.obj(content)
@@ -172,12 +187,22 @@ def open_edit_popup(self, setting):
172187
cancel_btn.add_event_cb(self.close_popup, lv.EVENT.CLICKED, None)
173188

174189
def save_setting(self, setting):
175-
if self.textarea:
190+
if setting["key"] == "wallet_type" and self.radio_group:
191+
selected_idx = self.radio_group.get_selected_button()
192+
new_value = "lnbits" if selected_idx == 0 else "nwc"
193+
elif self.textarea:
176194
new_value = self.textarea.get_text()
177-
editor = self.prefs.edit()
178-
editor.put_string(setting["key"], new_value)
179-
editor.commit()
180-
setting["value_label"].set_text(new_value if new_value else "Not set")
195+
else:
196+
new_value = ""
197+
198+
editor = self.prefs.edit()
199+
editor.put_string(setting["key"], new_value)
200+
editor.commit()
201+
setting["value_label"].set_text(new_value if new_value else "Not set")
202+
203+
if setting["key"] == "wallet_type":
204+
self.update_setting_visibility()
205+
181206
self.close_popup(None)
182207

183208
def close_popup(self, event):
@@ -188,7 +213,6 @@ def close_popup(self, event):
188213
self.hide_keyboard()
189214

190215

191-
192216
def settings_button_tap(event):
193217
global settings_screen, wallet
194218
if not settings_screen:

0 commit comments

Comments
 (0)