tandroid: update create and recover dialogs - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit d8c49a2fef68e08ffeecffe6604538bc0f5fa6e2 DIR parent cf1f533613549e918bae5c73ae8a8d243fe8b933 HTML Author: ThomasV <thomasv@gitorious> Date: Tue, 20 Nov 2012 17:21:57 +0100 android: update create and recover dialogs Diffstat: M electrum | 3 ++- M lib/gui_android.py | 172 ++++++++++++++++++------------- 2 files changed, 100 insertions(+), 75 deletions(-) --- DIR diff --git a/electrum b/electrum t@@ -197,13 +197,14 @@ if __name__ == '__main__': else: sys.exit("Error: Unknown GUI: " + pref_gui ) - gui = gui.ElectrumGui(wallet, config) interface = Interface(config, True) wallet.interface = interface interface.start() interface.send([('server.peers.subscribe',[])]) + gui = gui.ElectrumGui(wallet, config) + found = config.wallet_file_exists if not found: a = gui.restore_or_create() DIR diff --git a/lib/gui_android.py b/lib/gui_android.py t@@ -107,16 +107,18 @@ def select_from_addresses(): def protocol_name(p): - if p == 't': return 'TCP/stratum' - if p == 'h': return 'HTTP/Stratum' - if p == 'n': return 'TCP/native' + if p == 't': return 'TCP' + if p == 'h': return 'HTTP' + if p == 's': return 'TCP/SSL' + if p == 'g': return 'HTTPS' + def protocol_dialog(host, protocol, z): droid.dialogCreateAlert('Protocol',host) if z: protocols = z.keys() else: - protocols = ['t','h','n'] + protocols = 'thsg' l = [] current = protocols.index(protocol) for p in protocols: t@@ -126,11 +128,13 @@ def protocol_dialog(host, protocol, z): droid.dialogSetNegativeButtonText('Cancel') droid.dialogShow() response = droid.dialogGetResponse().result + selected_item = droid.dialogGetSelectedItems().result + droid.dialogDismiss() + if not response: return + if not selected_item: return if response.get('which') == 'positive': - response = droid.dialogGetSelectedItems().result[0] - droid.dialogDismiss() - p = protocols[response] + p = protocols[selected_item[0]] port = z[p] return host + ':' + port + ':' + p t@@ -458,66 +462,6 @@ def pay_to(recipient, amount, fee, label): -def recover(): - - droid.dialogCreateAlert("Wallet not found","Do you want to create a new wallet, or restore an existing one?") - droid.dialogSetPositiveButtonText('Create') - droid.dialogSetNeutralButtonText('Restore') - droid.dialogSetNegativeButtonText('Cancel') - droid.dialogShow() - response = droid.dialogGetResponse().result - droid.dialogDismiss() - if response.get('which') == 'negative': - exit(1) - - is_recovery = response.get('which') == 'neutral' - - if not is_recovery: - wallet.new_seed(None) - else: - if modal_question("Input method",None,'QR Code', 'mnemonic'): - code = droid.scanBarcode() - r = code.result - if r: - seed = r['extras']['SCAN_RESULT'] - else: - exit(1) - else: - m = modal_input('Mnemonic','please enter your code') - try: - seed = mnemonic_decode(m.split(' ')) - except: - modal_dialog('error: could not decode this seed') - exit(1) - - wallet.seed = str(seed) - - modal_dialog('Your seed is:', wallet.seed) - modal_dialog('Mnemonic code:', ' '.join(mnemonic_encode(wallet.seed)) ) - - msg = "recovering wallet..." if is_recovery else "creating wallet..." - droid.dialogCreateSpinnerProgress("Electrum", msg) - droid.dialogShow() - - wallet.init_mpk( wallet.seed ) - WalletSynchronizer(wallet,True).start() - wallet.update() - - droid.dialogDismiss() - droid.vibrate() - - if is_recovery: - if wallet.is_found(): - wallet.update_tx_history() - wallet.fill_addressbook() - modal_dialog("recovery successful") - else: - if not modal_question("no transactions found for this seed","do you want to keep this wallet?"): - exit(1) - - change_password_dialog() - wallet.save() - def make_new_contact(): t@@ -566,8 +510,7 @@ def main_loop(): print "got event in main loop", repr(event) if event == 'OK': continue if event is None: continue - #if event["name"]=="refresh": - + if not event.get("name"): continue # request 2 taps before we exit if event["name"]=="key": t@@ -621,6 +564,7 @@ def payto_loop(): while out is None: event = droid.eventWait().result print "got event in payto loop", event + if not event.get("name"): continue if event["name"] == "click": id = event["data"]["id"] t@@ -809,14 +753,17 @@ def settings_loop(): out = None while out is None: - event = droid.eventWait().result + event = droid.eventWait() + event = event.result print "got event", event if event == 'OK': continue if not event: continue plist, servers_list = interface.get_servers_list() + name = event.get("name") + if not name: continue - if event["name"] == "itemclick": + if name == "itemclick": pos = event["data"]["position"] host, port, protocol = interface.server.split(':') t@@ -837,6 +784,7 @@ def settings_loop(): if host in plist: srv = protocol_dialog(host, protocol, plist[host]) if srv: + wallet.config.set_key("server", srv, True) try: wallet.interface.set_server(srv) except: t@@ -848,6 +796,7 @@ def settings_loop(): if a_port: if a_port != port: srv = host + ':' + a_port + ':'+ protocol + wallet.config.set_key("server", srv, True) try: wallet.interface.set_server(srv) except: t@@ -874,13 +823,13 @@ def settings_loop(): seed_dialog() - elif event["name"] in menu_commands: + elif name in menu_commands: out = event["name"] - elif event["name"] == 'cancel': + elif name == 'cancel': out = 'main' - elif event["name"] == "key": + elif name == "key": if event["data"]["key"] == '4': out = 'main' t@@ -968,3 +917,78 @@ class ElectrumGui: break droid.makeToast("Bye!") + + def restore_or_create(self): + droid.dialogCreateAlert("Wallet not found","Do you want to create a new wallet, or restore an existing one?") + droid.dialogSetPositiveButtonText('Create') + droid.dialogSetNeutralButtonText('Restore') + droid.dialogSetNegativeButtonText('Cancel') + droid.dialogShow() + response = droid.dialogGetResponse().result + droid.dialogDismiss() + if not response: return + if response.get('which') == 'negative': + return + + return 'restore' if response.get('which') == 'neutral' else 'create' + + def seed_dialog(self): + if modal_question("Input method",None,'QR Code', 'mnemonic'): + code = droid.scanBarcode() + r = code.result + if r: + seed = r['extras']['SCAN_RESULT'] + else: + return + else: + m = modal_input('Mnemonic','please enter your code') + try: + seed = mnemonic_decode(m.split(' ')) + except: + modal_dialog('error: could not decode this seed') + return + wallet.seed = str(seed) + return True + + + def network_dialog(self): + pass + + + def create_wallet(self): + + # generate the first addresses + wallet.synchronize() + # run a dialog indicating the seed, ask the user to remember it + modal_dialog('Your seed is:', wallet.seed) + modal_dialog('Mnemonic code:', ' '.join(mnemonic_encode(wallet.seed)) ) + change_password_dialog() + wallet.save() + + + def restore_wallet(self): + + msg = "recovering wallet..." + droid.dialogCreateSpinnerProgress("Electrum", msg) + droid.dialogShow() + + + wallet.up_to_date_event.clear() + wallet.up_to_date = False + wallet.interface.poke('synchronizer') + while not wallet.up_to_date: + time.sleep(0.1) + + droid.dialogDismiss() + droid.vibrate() + + if wallet.is_found(): + wallet.update_tx_history() + wallet.fill_addressbook() + modal_dialog("recovery successful") + else: + if not modal_question("no transactions found for this seed","do you want to keep this wallet?"): + return + + wallet.save() +