commit 37e93928ab2786f107332a87551433341702ea27
parent 0d5114b6c2ed648b7739b325b18458542a054684
Author: ThomasV <thomasv@electrum.org>
Date: Mon, 7 Dec 2015 14:33:18 +0100
kivy: improve settings and password dialogs
Diffstat:
4 files changed, 73 insertions(+), 45 deletions(-)
diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv
@@ -317,6 +317,27 @@
if self.parent: self.parent.parent.dismiss()
app.popup_dialog(self.name)
+
+<SettingsItem@ButtonBehavior+BoxLayout>
+ orientation: 'vertical'
+ title: ''
+ description: ''
+ size_hint: 1, None
+ Label:
+ id: title
+ text: self.parent.title
+ size_hint: 1, 1
+ bold: True
+ text_size: self.size
+ halign: 'left'
+ Label:
+ text: self.parent.description
+ size_hint: 1, 1
+ text_size: self.size
+ color: 0.8, 0.8, 0.8, 1
+ halign: 'left'
+
+
BoxLayout:
orientation: 'vertical'
diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
@@ -9,7 +9,7 @@ import electrum
from electrum import WalletStorage, Wallet
from electrum.i18n import _, set_language
from electrum.contacts import Contacts
-from electrum.util import profiler
+from electrum.util import profiler, InvalidPassword
from electrum.plugins import run_hook
from electrum.util import format_satoshis, format_satoshis_plain
@@ -798,19 +798,40 @@ class ElectrumWindow(App):
popup.on_dismiss = cb
popup.open()
+ def protected(self, f, args):
+ if self.wallet.use_encryption:
+ self.password_dialog(_('Enter PIN'), f, args)
+ else:
+ apply(f, args + (None,))
+
def change_password(self):
- self.password_dialog(self._change_password, ())
+ self.protected(self._change_password, ())
+
+ def _change_password(self, old_password):
+ if old_password:
+ try:
+ self.wallet.check_password(old_password)
+ except InvalidPassword:
+ self.show_error("Invalid PIN")
+ return
+ self.password_dialog(_('Enter new PIN'), self._change_password2, (old_password,))
- def _change_password(self, password):
- print "zs", password
+ def _change_password2(self, old_password, new_password):
+ self.password_dialog(_('Confirm new PIN'), self._change_password3, (old_password, new_password))
- def password_dialog(self, f, args):
- if self.wallet.use_encryption:
- popup = Builder.load_file('gui/kivy/uix/ui_screens/password.kv')
- def callback():
- pw = popup.ids.kb.password
- Clock.schedule_once(lambda x: apply(f, args + (pw,)), 0.5)
- popup.on_dismiss = callback
- popup.open()
+ def _change_password3(self, old_password, new_password, confirmed_password):
+ if new_password == confirmed_password:
+ self.wallet.update_password(old_password, new_password)
else:
- apply(f, args + (None,))
+ self.show_error("PIN numbers do not match")
+
+ def password_dialog(self, title, f, args):
+ popup = Builder.load_file('gui/kivy/uix/ui_screens/password.kv')
+ popup.title = title
+ def callback():
+ pw = popup.ids.kb.password
+ Clock.schedule_once(lambda x: apply(f, args + (pw,)), 0.1)
+ popup.on_dismiss = callback
+ popup.open()
+
+
diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py
@@ -218,7 +218,7 @@ class SendScreen(CScreen):
message = unicode(self.screen.message)
fee = None
outputs = [('address', address, amount)]
- self.app.password_dialog(self.send_tx, (outputs, fee, message))
+ self.app.protected(self.send_tx, (outputs, fee, message))
def send_tx(self, *args):
self.app.show_info("Sending...")
diff --git a/gui/kivy/uix/ui_screens/settings.kv b/gui/kivy/uix/ui_screens/settings.kv
@@ -3,38 +3,24 @@ Popup:
title: _('Settings')
BoxLayout:
-
orientation: 'vertical'
-
- Button:
- text: _('Set PIN Code')
- size_hint: 1, None
- height: '48dp'
- on_release: app.change_password()
-
- GridLayout:
- cols: 2
- size_hint: 1, None
- height: '100dp'
- Label:
- text: _('Base unit')
- size_hint: 1, None
- height: '48dp'
- Button:
- text: app.base_unit
- size_hint: 1, None
- height: '48dp'
- on_release:
- app._rotate_bu()
- self.text = app.base_unit
- Label:
- size_hint: 1, None
- text: 'OpenAlias'
- height: '48dp'
- TextInput:
- size_hint: 1, None
- height: '48dp'
- multiline: False
+ SettingsItem:
+ title: _('PIN Code') + ' (%s)'%('ON' if app.wallet.use_encryption else 'OFF')
+ description: _("Your PIN code will be required in order to spend bitcoins.")
+ on_release:
+ app.change_password()
+ self.title = _('PIN Code') + ' (%s)'%('ON' if app.wallet.use_encryption else 'OFF')
+ CardSeparator
+ SettingsItem:
+ title: _('Denomination') + ' (' + app.base_unit + ')'
+ description: "Base unit for Bitcoin amounts."
+ on_release:
+ app._rotate_bu()
+ self.title = _('Denomination') + ' (' + app.base_unit + ')'
+ CardSeparator
+ SettingsItem:
+ title: _('OpenAlias')
+ description: "Email-like address."
Widget:
size_hint: 1, 1