Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 38 additions & 8 deletions apps/bt/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,21 +222,45 @@ def _activate_selected(self):
if not self._bt:
return
try:
self._bt.set_active(not self._bt.is_active())
now_on = not self._bt.is_active()
self._bt.set_active(now_on)
# Auto-discover the moment BT comes up — the user
# expectation is "turn it on, see what's nearby."
# We also leave the local beacon broadcasting (handled
# inside set_active(True) → _start_advertising) so this
# badge can be paired *to* without a second tap.
if now_on:
try:
self._bt.scan_start(SCAN_DUR_MS)
self._scan_left = SCAN_DUR_MS
except Exception:
pass
except Exception:
pass
self._dirty = True
elif kind == "nearby":
# Pair flow lands in slice 3 — for now we just remember the
# last requested target and surface it as a notification so
# the user can see the round-trip wiring is in place.
# Kick the real pair flow. oreoWare.bt.start_pair() owns the
# central-role connect + SMP handshake; we just hand it the
# selected scan entry and surface the result as a
# notification. The notification panel is where the user
# tracks pair state once they leave this app.
mac = payload.get("mac", "?")
name = payload.get("name", "?")
ok = False
err = ""
if self._bt:
try:
ok = bool(self._bt.start_pair(payload))
except Exception as e:
err = str(e)[:40]
try:
from oreoOS import notifications
notifications.push("bt", "Pair queued",
"%s · %s" % (name[:14], mac[-8:]),
target=None)
if ok:
title, body = "Pairing…", "%s · %s" % (name[:14], mac[-8:])
else:
title = "Pair failed"
body = err or ("%s · %s" % (name[:14], mac[-8:]))
notifications.push("bt", title, body, target=None)
except Exception:
pass
self._dirty = True
Expand All @@ -248,7 +272,13 @@ def draw(self, d):
self._dirty = False
d.clear(theme.BG)
widgets.draw_header(d, "BLUETOOTH")
widgets.draw_hint(d, "A=select B=scan HOME=back")
# Contextual hint — when the selection lands on a discovered
# device we promise "A = Connect" instead of the generic
# "select" so the user knows the next tap kicks off a pair.
if self._sel_key[0] == "nearby":
widgets.draw_hint(d, "A=Connect B=scan HOME=back")
else:
widgets.draw_hint(d, "A=toggle B=scan HOME=back")

self._draw_identity(d)

Expand Down
2 changes: 1 addition & 1 deletion apps/store/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ def _draw_card(self, d, y, i):
# row is interactive.
right_x = SW - ROW_PAD_X
chev_x = right_x - 14
if item["installed"]:
if item.get("installed"):
tag = "✓"
tag_w = 12
tag_x = chev_x - tag_w - 6
Expand Down
69 changes: 69 additions & 0 deletions apps_market/Colors/assets/optimized/color_icon.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""Auto-generated bitmap — do not edit. Re-run tools/optimize_assets.py."""
W = 32
H = 32
DATA = (
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\x97\xff\xf9\xff\xb8\xff\x77\xff\x97\xff\x97\xff\x97'
b'\xff\x97\xff\xf8\xff\x97\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\x97\xff\xf8\xe6\x75\xac\x6f\x83\x0b\x82\xea\x82\xea\x82\xea\x8a\xea'
b'\x82\xea\xa4\x4f\xe6\x95\xff\xf9\xff\x77\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\xf8\xe6\xb5\x8b\x4c\x72\x88\x93\x8a\xd5\x6e\xf6\xb1\xf6\x51\xde\x50\xbe\x51'
b'\xce\x10\xa3\x8a\x8a\xc9\xa4\x4f\xf7\x36\xff\xd8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\xf9\xa4\x4f\x7a\xa9\xbd\x0e\xfd\x50\xfc\x90\xfb\x4f\xfd\x30\xf7\x33\x2e\xb2\x06\xb2'
b'\x26\xb2\x77\x33\xbe\xb2\xb4\x6c\x6a\x08\xd6\x13\xff\xd8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x57\xff\xf8\x9b\xee\x7a\xa8\xf6\x31\xfc\x10\xfa\x2d\xfa\x0d\xf9\xcd\xfb\xef\xdf\x12\x06\x71\x06\x92'
b'\x06\x91\x06\x71\x06\x92\x97\x53\xd5\x8f\x59\x46\xde\x75\xff\xb8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x57\xff\xf8\xb4\xb0\x7a\xc8\xfe\x32\xfa\xae\xf9\xed\xfa\x6d\xfa\x8e\xfa\x2d\xfc\x2f\xdf\x12\x06\x71\x06\x92'
b'\x06\x92\x06\x92\x06\x92\x06\x51\x5f\x33\xcd\x4e\x72\x49\xf7\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x57\xff\xb8\xde\x34\x72\x48\xfe\xf2\xfa\xee\xfa\x0d\xfa\x8e\xfa\x6d\xfa\x6d\xfa\x0d\xfc\x2f\xe7\x12\x06\x71\x06\x92'
b'\x06\x92\x06\x92\x06\x91\x06\x91\x06\x51\xdf\x94\x9b\x4a\xb4\xf0\xff\xf8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\xb8\x6a\x08\xcd\x4e\xfc\xd0\xf9\x8c\xfa\xae\xfa\x6d\xfa\x6d\xfa\x6d\xfa\x0d\xfc\x2f\xe7\x12\x0e\x71\x06\x92'
b'\x06\x91\x06\x91\x06\x92\x2e\xb3\xae\xd3\xff\x33\xd5\x4e\x72\x49\xff\xb8\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x57\xff\xd8\xcd\x92\x69\xe7\xff\x53\xfd\x50\xf2\x2c\xf9\xed\xfa\x0d\xfa\x4d\xfa\x8e\xfa\x2d\xfc\x4f\xe7\x32\x0e\x71\x06\x92'
b'\x06\x93\x2e\x92\x9e\x4d\xf6\x6c\xfe\x6c\xfe\xd2\xf6\x71\x82\xea\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x57\xff\xf8\x8b\x6c\xb4\x4c\xff\x73\xfe\xf2\xfe\xb1\xfd\x90\xf3\xee\xf2\x8d\xfa\x4d\xf9\xad\xfc\x0f\xe7\x32\x06\x92\x36\x91'
b'\xa6\x4d\xf6\x07\xfd\xa1\xfd\x81\xfd\xa0\xfe\xec\xf6\xb2\x82\xea\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x57\xff\xb8\x82\xca\xdd\xcf\xfe\xf1\xfe\x91\xfe\xd1\xff\x11\xff\x11\xfe\x90\xfd\xb0\xfc\x0f\xfd\x50\xf7\x12\xc6\x6f\xfd\xc4'
b'\xfd\xa1\xfd\xa1\xfd\xa2\xfe\x02\xed\x01\xc4\x24\xcd\x4e\x83\x0a\xff\xb8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x57\xff\xb8\x8b\x6c\xee\x2f\xff\x13\xff\x77\xff\x77\xff\x77\xff\x56\xff\x34\xff\x33\xff\x12\xfe\xf2\xfe\xd2\xfd\xe5\xfd\xa1'
b'\xfd\xc2\xfd\xa2\xfe\x02\xd4\x62\x69\xa6\x7a\xec\x72\x69\x49\x25\xe6\x95\xff\xd8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x57\xff\xb8\x8b\x4b\xed\xee\xff\x55\xff\x77\xff\x77\xff\x77\xff\x77\xff\x98\xff\x57\xfe\xd1\xff\x12\xff\x33\xfe\x4c\xfd\x81'
b'\xfd\xc2\xfd\xc2\xed\x42\x50\xe3\xc5\xf5\xff\xfc\xff\xba\xac\xb1\x49\x05\xd5\xf3\xff\xd8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x57\xff\xb8\x8b\x4b\xee\x0f\xff\x34\xff\x77\xff\x77\xff\x77\xff\x77\xff\x56\xfe\xd2\xfe\x2f\xcc\x2a\xcc\x2a\xfe\x0f\xfe\x09'
b'\xfd\x61\xfe\x22\xc3\xc1\x7b\x0c\xff\xfb\xff\x99\xff\xb9\xff\xfc\xa4\x70\x38\x63\xef\x16\xff\xd8\xff\xb8\xff\x57\xff\x77\xff\x77'
b'\xff\x57\xff\xd8\x72\x69\xc4\xcc\xff\x12\xff\x77\xff\x77\xff\x77\xff\x56\xfe\xd2\xf6\x70\x69\xc6\x28\x44\x28\x23\x69\xe6\xfe\xd2'
b'\xfe\x0b\xfd\xa1\xc3\xa1\x72\xcc\xff\xb9\xff\xb9\xff\xb9\xff\xb9\xff\xba\x49\x25\x8b\x6c\xde\xb5\xd6\x13\xff\xd8\xff\x77\xff\x77'
b'\xff\x57\xff\xf8\xac\x6f\x7a\xa8\xff\x11\xfe\xd3\xff\x78\xff\x36\xfe\xb1\xff\x11\xcd\x4e\x39\x06\xf7\x36\xcd\xb2\x28\x84\xee\x50'
b'\xfe\xf2\xfe\x2d\xed\xac\x59\x25\x93\xce\xf7\x79\xff\xda\xff\xda\xf7\xba\xac\xb0\x30\x63\x59\xc6\x41\x04\x93\xed\xff\x97\xff\x77'
b'\xff\x57\xff\x97\xee\xf6\x38\x84\xd5\x4d\xff\x11\xfe\x70\xfe\x90\xfe\xb1\xfe\xd1\xf6\xb1\x72\xa9\x72\xeb\x6a\x6a\x8b\x6a\xfe\xf2'
b'\xfe\xd1\xff\x33\xfe\x0f\x69\x44\x20\x01\x93\xad\xff\xda\x9c\x2f\x59\xe7\x72\xaa\x51\x85\x6a\x27\x49\x45\x38\x84\xff\x36\xff\x97'
b'\xff\x77\xff\x57\xff\xd8\xa4\x4e\x50\xc3\xf6\x0f\xfe\xf1\xfe\xd1\xfe\xd1\xfe\xb1\xfe\xf1\xf6\x70\xac\x4c\xb4\xad\xff\x12\xff\x12'
b'\xfe\x90\xd4\x4a\x71\x65\x28\x02\x41\x05\xde\x96\xf7\x38\x38\xc5\x61\xc6\x51\x65\x59\x86\x51\x86\x20\x02\x6a\x49\xff\x97\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\xd8\x72\xaa\x58\xa3\xdc\x8b\xfe\x70\xfe\xf1\xfe\xf1\xfe\xf1\xff\x12\xff\x72\xfe\xf1\xfe\x4f\xe4\xec'
b'\x9a\x46\x40\x63\x30\x84\x41\x05\x8b\xad\xff\xfc\xf7\x38\x49\x26\x40\xc5\x59\xc6\x38\xa4\x30\x83\x59\xa7\xe6\xb5\xff\xb8\xff\x57'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\xb8\x7b\x2b\x48\xc3\x89\xe4\xd4\x29\xf5\x0b\xec\xeb\xec\xcb\xe4\xaa\xc3\x47\xa2\x66\x48\x83'
b'\x30\x64\x41\x25\x49\x86\x41\x25\xe6\xb7\xde\xb7\x51\xa7\xbd\x73\xcd\xd3\x49\x26\x49\x45\x28\x43\xcd\xb2\xff\xf8\xff\x57\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\xd8\xd6\x34\x7b\x2b\x51\x05\x59\x04\x59\x04\x59\x04\x48\x63\x38\xc4\x38\xc5\x41\x25'
b'\x51\xa7\x41\x66\x59\xe8\xcd\xf4\xde\x97\x59\xc9\xb5\x54\xff\xfd\xe6\x55\x40\xc5\x28\x43\x38\xc4\xcd\xb2\xff\xb8\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\xb8\xff\xf8\xee\xd6\xde\x75\xe6\x75\xe6\xf6\x8b\x6c\x28\x43\x51\xc7\x51\xc7'
b'\x41\x45\x83\x8c\xf7\x79\xd6\x56\x51\x66\xd5\x8c\xff\xf6\xd5\x91\x38\x85\xb4\x2e\x7a\x48\x93\xcd\xff\xf9\xff\x56\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\x57\xff\x97\xff\xb8\xff\xb7\xff\x97\xff\xf8\x9c\x0d\x20\x02\x51\xa7'
b'\xbd\x32\xff\xfa\xe6\xb6\x51\xa7\xdd\x48\xfe\x82\xdc\x61\x48\xa3\xa3\xcd\xfe\x53\x7a\x89\x41\x25\xe6\xb5\xff\x97\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\x77\xff\xd8\xac\x8f\x38\x84'
b'\x9c\x0f\xff\xb9\xb5\x33\x8a\xa5\xfe\x83\xbb\x81\x40\xa4\xb4\x6f\xfe\x74\x7a\x89\x30\xa4\x20\x01\xbd\x10\xff\xf8\xff\x57\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\xf9\xbd\x51'
b'\x30\x83\x7b\x0c\x8a\xa8\xcb\x83\x59\x63\x59\x87\xd5\x31\xf6\x13\x82\xca\x30\xa4\x30\xa4\x41\x05\xee\xf6\xff\x97\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\xb8'
b'\xef\x37\x6a\x28\xdc\x8a\xfe\x65\x69\xa5\xb4\x6f\xa3\xed\x49\x46\x30\xc4\x38\xe4\x28\x22\xb4\xd0\xff\xf8\xff\x57\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x56'
b'\xff\xf9\x9b\xee\x8a\x44\xdc\x64\x48\xa2\x18\x02\x20\x02\x28\x43\x28\x63\x28\x43\x93\xed\xff\xd8\xff\x57\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xf7\x37\x8b\x4c\x8b\x4c\xa4\x4f\x83\x0b\x8b\xac\x83\x8c\x8b\xac\xde\x33\xff\xb8\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\xf8\xff\xd8\xff\xd8\xff\xf8\xff\xf8\xff\xd8\xff\xf8\xff\xb8\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
b'\xff\x77\xff\x77\xff\x57\xff\x57\xff\x57\xff\x57\xff\x57\xff\x57\xff\x57\xff\x57\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77'
)
Binary file removed apps_market/Colors/assets/raw/color_splash.png
Binary file not shown.
Loading
Loading