@@ -10,7 +10,11 @@ def __init__(self, wallet, network, idx=None, branch_index=0):
1010 self .wallet = wallet
1111 self .network = network
1212 self .idx = wallet .unused_recv
13- addr , gap = wallet .get_address (self .idx , network = network , branch_index = branch_index )
13+ addr , gap = wallet .get_address (
14+ self .idx ,
15+ network = network ,
16+ branch_index = branch_index ,
17+ )
1418 super ().__init__ (
1519 " " + wallet .name + " #708092 " + lv .SYMBOL .EDIT ,
1620 format_addr (addr , words = 4 ),
@@ -121,74 +125,80 @@ def update_address(self):
121125 self .warning .set_text ("" )
122126 self .hide_loader ()
123127
128+ # micropython doesn't support mixins :(
129+ def _build_screen (scr , policy , keys ):
130+ scr .policy = add_label ("Policy: " + policy , y = 75 , scr = scr )
131+
132+ # check if we need slip132 switch
133+ need_slip132_switch = any (
134+ k ["canonical" ] != k ["slip132" ]
135+ for k in keys
136+ )
137+ if need_slip132_switch :
138+ lbl = lv .label (scr )
139+ lbl .set_text ("Canonical xpub SLIP-132 " )
140+ lbl .align (scr .policy , lv .ALIGN .OUT_BOTTOM_MID , 0 , 30 )
141+ scr .slip_switch = lv .sw (scr )
142+ scr .slip_switch .align (lbl , lv .ALIGN .CENTER , 0 , 0 )
143+ scr .slip_switch .set_event_cb (on_release (scr .fill_message ))
144+ else :
145+ scr .slip_switch = None
146+
147+ scr .page .align (
148+ scr .policy ,
149+ lv .ALIGN .OUT_BOTTOM_MID ,
150+ 0 ,
151+ 30 + 40 * int (need_slip132_switch )
152+ )
153+ scr .message .set_recolor (True )
154+ scr .page .set_height (500 )
155+
156+ def _fill_message (keys , is_complex , use_slip132 = False ):
157+ msg = ""
158+ arg = "slip132" if use_slip132 else "canonical"
159+ for i , k in enumerate (keys ):
160+ alias = "" if not is_complex else " (%s)" % chr (65 + i )
161+ kstr = str (k [arg ]).replace ("]" ,"]\n " )
162+ if k ["mine" ]:
163+ msg += "#7ED321 My key%s: #\n %s\n \n " % (alias , kstr )
164+ elif k ["is_nums" ]:
165+ msg += "#00CAF1 NUMS key%s: #\n Nobody knows private key\n \n " % alias
166+ elif k ["is_private" ]:
167+ msg += "#F51E2D Private key%s: #\n %s\n \n " % (alias , kstr )
168+ else :
169+ msg += "#F5A623 External key%s:\n # %s\n \n " % (alias , kstr )
170+ return msg
171+
124172
125173class ConfirmWalletScreen (Prompt ):
126174 def __init__ (self , name , policy , keys , is_complex = True ):
127175 super ().__init__ ('Add wallet "%s"?' % name , "" )
128- self . policy = add_label ( "Policy: " + policy , y = 75 , scr = self )
176+ _build_screen ( self , policy , keys )
129177 self .is_complex = is_complex
130-
131- lbl = lv .label (self )
132- lbl .set_text ("Canonical xpub SLIP-132 " )
133- lbl .align (self .policy , lv .ALIGN .OUT_BOTTOM_MID , 0 , 30 )
134- self .slip_switch = lv .sw (self )
135- self .slip_switch .align (lbl , lv .ALIGN .CENTER , 0 , 0 )
136- self .slip_switch .set_event_cb (on_release (self .fill_message ))
137-
138- self .page .align (self .policy , lv .ALIGN .OUT_BOTTOM_MID , 0 , 70 )
139- self .message .set_recolor (True )
140- self .page .set_height (500 )
141178 self .keys = keys
142179 self .fill_message ()
143180
181+ @property
182+ def use_slip132 (self ):
183+ return self .slip_switch .get_state () if self .slip_switch is not None else False
184+
144185 def fill_message (self ):
145- msg = ""
146- arg = "slip132" if self .slip_switch .get_state () else "canonical"
147- for i , k in enumerate (self .keys ):
148- alias = "" if not self .is_complex else " (%s)" % chr (65 + i )
149- kstr = str (k [arg ]).replace ("]" ,"]\n " )
150- if k ["mine" ]:
151- msg += "#7ED321 My key%s: #\n %s\n \n " % (alias , kstr )
152- elif k ["is_nums" ]:
153- msg += "#00CAF1 NUMS key%s: #\n Nobody knows private key\n \n " % alias
154- elif k ["is_private" ]:
155- msg += "#F51E2D Private key%s: #\n %s\n \n " % (alias , kstr )
156- else :
157- msg += "#F5A623 External key%s:\n # %s\n \n " % (alias , kstr )
186+ msg = _fill_message (self .keys , self .is_complex , self .use_slip132 )
158187 self .message .set_text (msg )
159188
160- # TODO: refactor to remove duplication
189+
161190class WalletInfoScreen (Alert ):
162191 def __init__ (self , name , policy , keys , is_complex = True ):
163192 super ().__init__ (name , "" )
164- self . policy = add_label ( "Policy: " + policy , y = 75 , scr = self )
193+ _build_screen ( self , policy , keys )
165194 self .is_complex = is_complex
166-
167- lbl = lv .label (self )
168- lbl .set_text ("Canonical xpub SLIP-132 " )
169- lbl .align (self .policy , lv .ALIGN .OUT_BOTTOM_MID , 0 , 30 )
170- self .slip_switch = lv .sw (self )
171- self .slip_switch .align (lbl , lv .ALIGN .CENTER , 0 , 0 )
172- self .slip_switch .set_event_cb (on_release (self .fill_message ))
173-
174- self .page .align (self .policy , lv .ALIGN .OUT_BOTTOM_MID , 0 , 70 )
175- self .message .set_recolor (True )
176- self .page .set_height (500 )
177195 self .keys = keys
178196 self .fill_message ()
179197
198+ @property
199+ def use_slip132 (self ):
200+ return self .slip_switch .get_state () if self .slip_switch is not None else False
201+
180202 def fill_message (self ):
181- msg = ""
182- arg = "slip132" if self .slip_switch .get_state () else "canonical"
183- for i , k in enumerate (self .keys ):
184- alias = "" if not self .is_complex else " (%s)" % chr (65 + i )
185- kstr = str (k [arg ]).replace ("]" ,"]\n " )
186- if k ["mine" ]:
187- msg += "#7ED321 My key%s: #\n %s\n \n " % (alias , kstr )
188- elif k ["is_nums" ]:
189- msg += "#AAAAAA NUMS key%s: #\n Nobody knows private key\n \n " % alias
190- elif k ["is_private" ]:
191- msg += "#F51E2D Private key%s: #\n %s\n \n " % (alias , kstr )
192- else :
193- msg += "#F5A623 External key%s:\n # %s\n \n " % (alias , kstr )
203+ msg = _fill_message (self .keys , self .is_complex , self .use_slip132 )
194204 self .message .set_text (msg )
0 commit comments