Skip to content

Commit 5f0a614

Browse files
Use Intent Result API and more local variables
1 parent a8e7e52 commit 5f0a614

File tree

3 files changed

+67
-66
lines changed

3 files changed

+67
-66
lines changed

internal_filesystem/apps/com.lightningpiggy.displaywallet/assets/captureqr.py

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,35 @@
1414

1515
from mpos.apps import Activity
1616

17-
width = 240
18-
height = 240
17+
class Camera(Activity):
1918

20-
status_label_text = "No camera found."
21-
status_label_text_searching = "Searching QR codes...\n\nHold still and make them big!\n10cm for simple QR codes,\n20cm for complex."
22-
status_label_text_found = "Decoding QR..."
19+
width = 240
20+
height = 240
2321

24-
class Camera(Activity):
22+
status_label_text = "No camera found."
23+
status_label_text_searching = "Searching QR codes...\n\nHold still and make them big!\n10cm for simple QR codes,\n20cm for complex."
24+
status_label_text_found = "Decoding QR..."
2525

26-
def __init__(self):
27-
super().__init__()
28-
self.cam = None
29-
self.current_cam_buffer = None # Variable to hold the current memoryview to prevent garbage collection
30-
self.image_dsc = None
31-
self.image = None
32-
self.qr_label = None
33-
self.scanqr_callback = None
34-
self.use_webcam = False
35-
self.qr_button = None
36-
self.snap_button = None
37-
self.capture_timer = None
38-
self.status_label = None
39-
self.status_label_cont = None
40-
self.keepliveqrdecoding = False
26+
cam = None
27+
current_cam_buffer = None # Holds the current memoryview to prevent garbage collection
28+
29+
image = None
30+
image_dsc = None
31+
scanqr_mode = None
32+
use_webcam = False
33+
keepliveqrdecoding = False
34+
35+
capture_timer = None
36+
37+
# Widgets:
38+
qr_label = None
39+
qr_button = None
40+
snap_button = None
41+
status_label = None
42+
status_label_cont = None
4143

4244
def onCreate(self):
43-
self.scanqr_callback = self.getIntent().extras.get("scanqr_callback")
45+
self.scanqr_mode = self.getIntent().extras.get("scanqr_mode")
4446
main_screen = lv.obj()
4547
main_screen.set_style_pad_all(0, 0)
4648
main_screen.set_style_border_width(0, 0)
@@ -76,13 +78,13 @@ def onCreate(self):
7678
self.image_dsc = lv.image_dsc_t({
7779
"header": {
7880
"magic": lv.IMAGE_HEADER_MAGIC,
79-
"w": width,
80-
"h": height,
81-
"stride": width * 2,
81+
"w": self.width,
82+
"h": self.height,
83+
"stride": self.width * 2,
8284
"cf": lv.COLOR_FORMAT.RGB565
8385
#"cf": lv.COLOR_FORMAT.L8
8486
},
85-
'data_size': width * height * 2,
87+
'data_size': self.width * self.height * 2,
8688
'data': None # Will be updated per frame
8789
})
8890
self.image.set_src(self.image_dsc)
@@ -115,15 +117,16 @@ def onResume(self, screen):
115117
print("Camera initialized, continuing...")
116118
self.capture_timer = lv.timer_create(self.try_capture, 100, None)
117119
self.status_label_cont.add_flag(lv.obj.FLAG.HIDDEN)
118-
if self.scanqr_callback:
120+
if self.scanqr_mode:
119121
self.start_qr_decoding()
120122
else:
121123
self.qr_button.remove_flag(lv.obj.FLAG.HIDDEN)
122124
self.snap_button.remove_flag(lv.obj.FLAG.HIDDEN)
123125
else:
124126
print("No camera found, stopping camtest.py")
125-
if self.scanqr_callback:
126-
self.scanqr_callback(False,"")
127+
if self.scanqr_mode:
128+
self.finish()
129+
127130

128131
def onStop(self, screen):
129132
print("camtest.py backgrounded, cleaning up...")
@@ -138,26 +141,26 @@ def onStop(self, screen):
138141
def qrdecode_one(self):
139142
try:
140143
import qrdecode
141-
result = qrdecode.qrdecode_rgb565(self.current_cam_buffer, width, height)
144+
result = qrdecode.qrdecode_rgb565(self.current_cam_buffer, self.width, self.height)
142145
#result = bytearray("INSERT_QR_HERE", "utf-8")
143146
if not result:
144-
self.status_label.set_text(status_label_text_searching)
147+
self.status_label.set_text(self.status_label_text_searching)
145148
else:
146149
self.stop_qr_decoding()
147150
result = remove_bom(result)
148151
result = print_qr_buffer(result)
149152
print(f"QR decoding found: {result}")
150-
if self.scanqr_callback:
151-
self.scanqr_callback(True,result)
153+
if self.scanqr_mode:
154+
self.setResult(True, result)
152155
self.finish()
153156
else:
154157
self.status_label.set_text(result) # in the future, the status_label text should be copy-paste-able
155158
except ValueError as e:
156159
print("QR ValueError: ", e)
157-
self.status_label.set_text(status_label_text_searching)
160+
self.status_label.set_text(self.status_label_text_searching)
158161
except TypeError as e:
159162
print("QR TypeError: ", e)
160-
self.status_label.set_text(status_label_text_found)
163+
self.status_label.set_text(self.status_label_text_found)
161164
except Exception as e:
162165
print("QR got other error: ", e)
163166

@@ -186,14 +189,14 @@ def start_qr_decoding(self):
186189
self.keepliveqrdecoding = True
187190
self.qr_label.set_text(lv.SYMBOL.EYE_CLOSE)
188191
self.status_label_cont.remove_flag(lv.obj.FLAG.HIDDEN)
189-
self.status_label.set_text(status_label_text_searching)
192+
self.status_label.set_text(self.status_label_text_searching)
190193

191194
def stop_qr_decoding(self):
192195
print("Deactivating live QR decoding...")
193196
self.keepliveqrdecoding = False
194197
self.qr_label.set_text(lv.SYMBOL.EYE_OPEN)
195-
status_label_text = self.status_label.get_text()
196-
if status_label_text == status_label_text_searching or status_label_text == status_label_text_found: # if it found a QR code, leave it
198+
self.status_label_text = self.status_label.get_text()
199+
if self.status_label_text in (self.status_label_text_searching or self.status_label_text_found): # if it found a QR code, leave it
197200
self.status_label_cont.add_flag(lv.obj.FLAG.HIDDEN)
198201

199202
def qr_button_click(self, e):
@@ -220,6 +223,8 @@ def try_capture(self, event):
220223
except Exception as e:
221224
print(f"Camera capture exception: {e}")
222225

226+
227+
223228
# Non-class functions:
224229
def init_internal_cam():
225230
try:

internal_filesystem/apps/com.lightningpiggy.displaywallet/assets/displaywallet.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -322,14 +322,16 @@ def create_radio_button(self, parent, text, index):
322322
cb.add_style(style_radio_chk, lv.PART.INDICATOR | lv.STATE.CHECKED)
323323
return cb
324324

325-
def gotqr_callback(self, success, data):
326-
print(f"gotqr_callback {success}, {data}")
327-
if success:
325+
def gotqr_result_callback(self, result):
326+
print(f"QR capture finished, result: {result}")
327+
if result.get("result_code"):
328+
data = result.get("data")
329+
print(f"Setting textarea data: {data}")
328330
self.textarea.set_text(data)
329331

330332
def cambutton_cb(self, event):
331333
print("cambutton clicked!")
332-
self.startActivity(Intent(activity_class=Camera).putExtra("scanqr_callback", self.gotqr_callback))
334+
self.startActivityForResult(Intent(activity_class=Camera).putExtra("scanqr_mode", True), self.gotqr_result_callback)
333335

334336
def save_setting(self, setting):
335337
if setting["key"] == "wallet_type" and self.radio_container:

internal_filesystem/builtin/apps/com.micropythonos.wificonf/assets/wificonf.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,26 @@
77
from mpos.apps import Activity, Intent
88
import mpos.ui
99

10+
# Global variables because they're shared between activities:
1011
access_points={}
11-
1212
last_tried_ssid = ""
1313
last_tried_result = ""
1414

15-
scan_button_scan_text = "Rescan"
16-
scan_button_scanning_text = "Scanning..."
17-
18-
RESULT_CODE_CONNECT = 1
19-
RESULT_CODE_CANCEL = 0
20-
21-
2215
class WiFiConfig(Activity):
2316

24-
havenetwork = True
17+
scan_button_scan_text = "Rescan"
18+
scan_button_scanning_text = "Scanning..."
19+
2520
ssids=[]
26-
busy_scanning=False
27-
busy_connecting=False
28-
#selected_ssid=None
21+
havenetwork = True
22+
busy_scanning = False
23+
busy_connecting = False
2924

3025
# Widgets:
3126
aplist = None
32-
error_label=None
33-
scan_button=None
34-
scan_button_label=None
27+
error_label = None
28+
scan_button = None
29+
scan_button_label = None
3530

3631
def onCreate(self):
3732
main_screen = lv.obj()
@@ -50,7 +45,7 @@ def onCreate(self):
5045
self.scan_button.set_size(lv.SIZE_CONTENT,lv.pct(15))
5146
self.scan_button.align(lv.ALIGN.BOTTOM_MID,0,0)
5247
self.scan_button_label=lv.label(self.scan_button)
53-
self.scan_button_label.set_text(scan_button_scan_text)
48+
self.scan_button_label.set_text(self.scan_button_scan_text)
5449
self.scan_button_label.center()
5550
self.scan_button.add_event_cb(self.scan_cb,lv.EVENT.CLICKED,None)
5651
self.setContentView(main_screen)
@@ -94,7 +89,7 @@ def scan_networks_thread(self):
9489
self.show_error("Wi-Fi scan failed")
9590
# scan done:
9691
self.busy_scanning = False
97-
lv.async_call(lambda l: self.scan_button_label.set_text(scan_button_scan_text), None)
92+
lv.async_call(lambda l: self.scan_button_label.set_text(self.scan_button_scan_text), None)
9893
lv.async_call(lambda l: self.scan_button.add_flag(lv.obj.FLAG.CLICKABLE), None)
9994
lv.async_call(lambda l: self.refresh_list(), None)
10095

@@ -105,7 +100,7 @@ def start_scan_networks(self):
105100
else:
106101
self.busy_scanning = True
107102
self.scan_button.remove_flag(lv.obj.FLAG.CLICKABLE)
108-
self.scan_button_label.set_text(scan_button_scanning_text)
103+
self.scan_button_label.set_text(self.scan_button_scanning_text)
109104
_thread.stack_size(mpos.apps.good_stack_size())
110105
_thread.start_new_thread(self.scan_networks_thread, ())
111106

@@ -146,13 +141,13 @@ def select_ssid_cb(self,ssid):
146141

147142
def password_page_result_cb(self, result):
148143
print(f"PasswordPage finished, result: {result}")
149-
if result.get("result_code") == RESULT_CODE_CONNECT:
144+
if result.get("result_code"):
150145
data = result.get("data")
151146
if data:
152147
self.start_attempt_connecting(data.get("ssid"), data.get("password"))
153148

154149
def start_attempt_connecting(self, ssid, password):
155-
print(f"start_attempt_connecting: Attempting to connect to SSID: {ssid}")
150+
print(f"start_attempt_connecting: Attempting to connect to SSID '{ssid}' with password '{password}'")
156151
self.scan_button.remove_flag(lv.obj.FLAG.CLICKABLE)
157152
self.scan_button_label.set_text(f"Connecting to {ssid}...")
158153
if self.busy_connecting:
@@ -164,7 +159,7 @@ def start_attempt_connecting(self, ssid, password):
164159

165160
def attempt_connecting_thread(self, ssid, password):
166161
global last_tried_ssid, last_tried_result
167-
print(f"attempt_connecting: Attempting to connect to SSID: {ssid}")
162+
print(f"attempt_connecting_thread: Attempting to connect to SSID '{ssid}' with password '{password}'")
168163
result="connected"
169164
try:
170165
if self.havenetwork:
@@ -189,7 +184,7 @@ def attempt_connecting_thread(self, ssid, password):
189184
last_tried_result = result
190185
self.busy_connecting=False
191186
# Schedule UI updates because different thread
192-
lv.async_call(lambda l: self.scan_button_label.set_text(scan_button_scan_text), None)
187+
lv.async_call(lambda l: self.scan_button_label.set_text(self.scan_button_scan_text), None)
193188
lv.async_call(lambda l: self.scan_button.add_flag(lv.obj.FLAG.CLICKABLE), None)
194189
lv.async_call(lambda l: self.refresh_list(), None)
195190

@@ -299,13 +294,12 @@ def connect_cb(self, event):
299294
access_points[self.selected_ssid]=password
300295
print(f"connect_cb: Updated access_points: {access_points}")
301296
save_config()
302-
self.setResult(RESULT_CODE_CONNECT, {"ssid": self.selected_ssid, "password": password})
297+
self.setResult(True, {"ssid": self.selected_ssid, "password": password})
303298
print("connect_cb: Restoring main_screen")
304299
self.finish()
305300

306301
def cancel_cb(self, event):
307302
print("cancel_cb: Cancel button clicked")
308-
self.setResult(RESULT_CODE_CANCEL, None)
309303
self.finish()
310304

311305

0 commit comments

Comments
 (0)