URI: 
       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()
       +