1919wallet = None
2020receive_qr_data = None
2121
22+ # Settings screen implementation
2223# Settings screen implementation
2324class 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-
192216def settings_button_tap (event ):
193217 global settings_screen , wallet
194218 if not settings_screen :
0 commit comments