diff --git a/apps/bt/main.py b/apps/bt/main.py index de4d247..70f46a5 100644 --- a/apps/bt/main.py +++ b/apps/bt/main.py @@ -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 @@ -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) diff --git a/apps/store/main.py b/apps/store/main.py index 363a7ac..24af323 100644 --- a/apps/store/main.py +++ b/apps/store/main.py @@ -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 diff --git a/apps_market/Colors/assets/optimized/color_icon.py b/apps_market/Colors/assets/optimized/color_icon.py new file mode 100644 index 0000000..d7af620 --- /dev/null +++ b/apps_market/Colors/assets/optimized/color_icon.py @@ -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' +) diff --git a/apps_market/Colors/assets/raw/color_splash.png b/apps_market/Colors/assets/raw/color_splash.png deleted file mode 100644 index 753aaa3..0000000 Binary files a/apps_market/Colors/assets/raw/color_splash.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/optimized/elixpo_pet_icon.py b/apps_market/Oreo Pet/assets/optimized/elixpo_pet_icon.py new file mode 100644 index 0000000..602bf87 --- /dev/null +++ b/apps_market/Oreo Pet/assets/optimized/elixpo_pet_icon.py @@ -0,0 +1,69 @@ +"""Auto-generated bitmap — do not edit. Re-run tools/optimize_assets.py.""" +W = 32 +H = 32 +DATA = ( + b'\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x36\xff\x37\xff\x37\xff\x36\xff\x37\xff\x36\xff\x36\xff\x37\xff\x36\xff\x37' + b'\xff\x37\xff\x37\xff\x37\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36' + b'\xff\x36\xff\x36\xff\x37\xff\x16\xff\x16\xff\x16\xff\x16\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x37\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36\xff\x37\xff\x37' + b'\xff\x37\xff\x37\xff\x36\xff\x77\xff\x77\xff\x57\xff\x98\xff\x37\xff\x36\xff\x37\xff\x36\xff\x36\xff\x37\xff\x36\xff\x36\xff\x36' + b'\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x16\xff\x16\xff\x16\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x16\xff\x16\xff\x57\xde\x34\xc5\x72\xe6\x75\xbd\x72\xff\x16\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x36\xff\x37\xff\x37' + b'\xff\x36\xff\x36\xff\x36\xff\x37\xff\x16\xff\x57\xff\x98\xff\x98\xff\x77\xff\x16\xff\x16\xff\x16\xff\x36\xff\x36\xff\x16\xff\x16' + b'\xff\x77\xff\xb8\xee\xf6\x92\x29\xb2\x2a\x9a\x6a\xa1\xa8\xb4\x6f\xff\x98\xff\x16\xff\x37\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37' + b'\xff\x37\xff\x36\xff\x37\xff\x16\xff\x77\xee\xb5\x93\xce\x83\x2c\xc5\x72\xff\xb8\xff\x98\xff\x77\xff\x77\xff\x77\xff\x77\xff\x98' + b'\xd5\xf3\xc5\x52\xd6\x13\xaa\x8a\xfa\xcb\xfb\x6d\xd2\x09\xac\x6f\xff\x98\xff\x16\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x36' + b'\xff\x37\xff\x37\xff\x36\xff\x57\xee\xb5\x5a\x09\x38\xc6\x38\xe6\x41\x47\xbd\x11\xc5\x51\x8b\xad\x8b\x8d\x83\x6d\xac\x90\xa4\x2e' + b'\x41\x06\x38\xe6\x51\xa8\xbd\x31\xba\xeb\xc9\xe9\xa3\xad\xf7\x57\xff\x37\xff\x36\xff\x37\xff\x36\xff\x37\xff\x36\xff\x37\xff\x37' + b'\xff\x37\xff\x37\xff\x16\xff\x77\x8b\x6d\x38\xc6\x49\x67\x49\x67\x30\xa5\x59\xe9\xac\xf2\xd6\x77\xe6\xf9\xe6\xf9\xcd\xf6\x93\xf0' + b'\x59\xe9\x49\x47\x38\xe6\x83\x4c\xee\xb5\xa4\x2e\xff\x37\xff\x57\xff\x36\xff\x37\xff\x36\xff\x36\xff\x37\xff\x36\xff\x37\xff\x37' + b'\xff\x37\xff\x36\xff\x36\xff\x37\x6a\x4a\x49\x47\x49\x47\x41\x06\x83\x8e\xef\x1a\xff\xfd\xff\xfc\xff\xfc\xff\xfc\xff\xfc\xff\xfd' + b'\xef\x5a\x83\x4d\x38\xe6\x6a\x6a\xff\x77\xff\x98\xff\x37\xff\x36\xff\x37\xff\x37\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x36' + b'\xff\x37\xff\x36\xff\x16\xff\x77\x83\x4c\x38\xe6\x38\xe6\xa4\x91\xff\xfd\xff\xdb\xff\xbb\xff\xbb\xff\xbb\xff\xbb\xff\xbb\xff\x9b' + b'\xff\xfc\xff\xbc\x6a\x8b\x8b\x6c\xff\x77\xff\x16\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x36\xff\x37\xff\x36\xff\x36' + b'\xff\x37\xff\x37\xff\x36\xff\x57\xee\xd6\x51\x87\x9c\x30\xff\xfd\xff\xbb\xff\xfc\xff\xbb\xff\xfc\xff\xdc\xff\xdb\xff\xdb\xff\xfc' + b'\xff\xdb\xff\xfd\xce\x36\xac\x6f\xff\x98\xff\x16\xff\x37\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36' + b'\xff\x36\xff\x36\xff\x36\xff\x37\xf6\xf6\x8b\x8e\xf7\x9b\xff\xdb\xff\xfc\xac\xb2\x62\x2a\x83\x8e\xf7\x7a\xff\xdb\xff\xfc\xee\xf9' + b'\x6a\x8b\x94\x10\xff\xfc\x93\xef\xf6\xd5\xff\x57\xff\x37\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x77\xff\x57\xff\x36\xff\x37' + b'\xff\x36\xff\x36\xff\x16\xff\x98\xc5\x51\xa4\x91\xff\xfd\xff\xfc\xac\xb2\x40\xe6\x62\x2a\x51\xa8\xc5\xb5\xff\xfc\xff\xfc\xac\xd2' + b'\x59\xe9\x41\x06\xbd\x54\xb5\x33\xcd\xb2\xff\x98\xf6\xf6\xde\x35\xde\x55\xde\x55\xde\x55\xde\x55\xde\x34\xee\x95\xff\x57\xff\x36' + b'\xff\x37\xff\x36\xff\x16\xff\x98\xa4\x6f\xc5\xf6\xff\xfd\xe6\xb8\x49\x47\x49\x67\xc5\xd5\x83\x8e\xb5\x33\xff\xfd\xff\xfd\x9c\x51' + b'\xb5\x13\x6a\xab\x62\x2a\xbd\x74\xb4\xb0\xff\xb8\x9c\x0d\x9b\x88\xa3\xa9\xa3\xa9\xa3\xa9\xa3\x88\xa4\x6e\x8b\xae\xd5\xf3\xff\x77' + b'\xff\x37\xff\x36\xff\x16\xff\x98\xa4\x6f\xcd\xf6\xff\xfe\xce\x16\x38\xc5\x49\x88\x51\xc8\x38\xc5\xe6\xf9\xbd\x94\x93\xf0\xcd\xf6' + b'\x38\xc5\x49\x88\x51\xa8\xc5\xb5\xa4\x6f\xff\x78\x93\x8a\xf5\x47\xf5\x48\xf5\x28\xf5\x28\xf5\x06\xff\x34\xac\xf2\xb4\xf1\xff\xb8' + b'\xff\x37\xff\x36\xff\x16\xff\xb8\xa4\x6f\xc5\xb5\xff\xdc\xf4\xf1\x8a\xab\x38\xe6\x38\xe6\x9c\x71\xef\x3a\xb5\x33\x7b\x2d\xd6\x78' + b'\x83\x6e\x49\x27\xab\x2c\xdc\xd2\x9c\x6f\xff\xb8\xbd\x10\x9b\xec\x9c\x0d\x9c\x0d\x9c\x0d\x9c\x0d\x9c\x2e\x9c\x4f\xee\xb5\xff\x57' + b'\xff\x37\xff\x36\xff\x16\xff\x77\xd5\xf3\x83\x4d\xff\xfc\xfd\x73\xfc\x70\xcc\xd2\xd6\x77\xff\xfd\xe6\xb8\xac\xf2\xac\xb2\xcd\xf6' + b'\xff\xfc\xee\x97\xfe\x35\xac\x50\xbd\x11\xff\x98\xff\x16\xee\x75\xee\x95\xee\x95\xee\x95\xee\x95\xe6\x54\xf6\xb5\xff\x77\xff\x16' + b'\xff\x37\xff\x36\xff\x36\xff\x16\xff\x97\xa4\x2f\x9c\x30\xff\x7a\xff\x5a\xff\xfd\xff\xfd\xff\xbb\xff\xfc\xff\xfc\xff\xfd\xff\xfc' + b'\xff\xfc\xff\xfd\xc5\xb5\x8b\x8d\xf7\x16\xff\x57\x9c\x2e\x84\x4c\x84\x6d\x74\x4e\x6c\x4f\x6c\x2f\xa4\xf1\x93\xce\xd5\xd3\xff\x77' + b'\xff\x37\xff\x36\xff\x36\xff\x36\xff\x16\xff\xb8\x9b\xee\x59\xc9\xac\xd2\xde\x77\xf7\x5a\xff\x9a\xff\xbb\xff\xbb\xff\x9a\xf7\x5a' + b'\xcd\xf5\x93\xef\x9b\xee\xee\xd5\xff\x57\xff\x16\x8b\xcd\xa6\x2f\x96\x10\x85\xf1\x6d\xd3\x65\x92\xe7\x58\xac\xd1\xb5\x11\xff\xb8' + b'\xff\x37\xff\x36\xff\x36\xff\x36\xff\x57\xe6\x95\x62\x4a\x41\x06\x41\x27\x49\x47\x59\xe9\x6a\x4a\x6a\xab\x7a\xcb\x72\x8b\x51\xc9' + b'\x41\x06\x38\xc6\xc5\x72\xff\xb8\xff\x16\xff\x57\xbd\x11\x8b\xcd\x94\x0e\x8c\x0e\x8c\x0e\x94\x0e\x9c\x0f\x9c\x4f\xf6\xd5\xff\x57' + b'\xff\x36\xff\x36\xff\x36\xff\x16\xff\x77\x7b\x0c\x39\x06\x5a\x09\x51\xe9\x49\x67\x49\x47\x41\x27\xa1\xc8\xda\xcb\xd2\xcb\x71\xa8' + b'\x49\x88\x49\x67\x49\x68\xe6\x54\xff\x57\xff\x37\xff\x16\xee\x53\xee\x54\xee\x54\xee\x54\xe6\x34\xde\x13\xee\x75\xff\x57\xff\x36' + b'\xff\x36\xff\x36\xff\x16\xff\x77\xe6\x74\x49\x67\x51\xc9\x51\xe9\x41\x47\xa4\x91\xde\xf9\x92\x2a\xfb\xad\xfe\xb7\xfd\x12\xd2\x49' + b'\xac\xf2\x83\x6e\x38\xc5\x8b\x8d\xff\x77\xff\x36\x8b\xef\x5b\xf3\x64\x13\x5b\xf3\x6c\x33\xb5\x12\xbd\x73\x93\xee\xcd\xb3\xff\x77' + b'\xff\x37\xff\x36\xff\x36\xff\x77\x9b\xee\x41\x47\x59\xe9\x51\xc8\x49\x88\xf7\x5a\xe7\x39\xa9\xe8\xfb\xef\xf6\xd8\xfc\x2f\xda\x08' + b'\xb4\xf2\xde\x98\x49\x47\x51\xa8\xee\x95\xff\x56\x73\x8f\x5c\xf8\x64\xd8\x5c\xb8\x75\x38\xe6\xd7\xf7\x79\xa4\xb1\xbd\x11\xff\xb8' + b'\xff\x37\xff\x36\xff\x57\x83\x2c\x5a\x09\x7b\x2c\x41\x47\x41\x27\x83\x6e\xff\xdb\xf7\x9b\x9b\x2d\xea\xcb\xfe\x97\xfc\xb1\xa1\xa7' + b'\xce\x57\xf7\x7a\x49\x88\x51\xc8\xee\xb5\xff\x77\xc5\x72\x93\xee\x9c\x2f\x94\x2f\x9c\x2f\x9c\x4f\x9c\x2f\xa4\x6f\xf6\xd6\xff\x57' + b'\xff\x36\xff\x37\xfe\xf6\x49\x67\x62\x2a\xcd\xb4\x6a\x4a\x83\x2d\x93\xef\x51\xc9\x5a\x0a\xbd\xb5\xa3\x2d\xaa\x09\x9a\x4a\xb5\x13' + b'\xff\xfd\xb4\xf2\x41\x06\x49\x68\x7b\x2c\xff\x37\xff\x77\xff\x97\xff\x97\xff\x97\xff\x97\xff\x77\xff\x77\xff\x97\xff\x37\xff\x36' + b'\xff\x37\xff\x16\xff\x57\x72\xcb\x30\xa5\xd5\xf5\xff\x38\x9c\x0f\x38\xc5\x49\x88\x49\x68\x62\x0a\xe7\x3a\xde\xf9\xe7\x19\xff\xfc' + b'\xff\xdb\x6a\x6a\x62\x0a\x72\xac\x59\xe9\xfe\xf6\xff\x37\xff\x16\xff\x16\xff\x16\xff\x16\xff\x16\xff\x16\xff\x16\xff\x36\xff\x37' + b'\xff\x37\xff\x16\xff\x57\xe6\xb5\x7b\x0b\x72\xcc\xf6\xd7\x62\x09\x41\x27\x72\xac\x93\xaf\x51\xc9\xee\xf8\xff\xfd\xff\xfc\xff\xdb' + b'\xa4\x70\x49\x27\x93\xaf\x6a\x8c\x7b\x0c\xff\x77\xff\x16\xff\x36\xff\x36\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x37\xff\x36\xff\x16\xff\x57\xfe\xf6\xb4\x0e\x8b\x6d\x59\xe9\x38\xc6\x59\xe9\x72\xed\x51\xa9\xac\xd2\xc5\x73\xb4\xd2\x83\x4d' + b'\x38\xe6\x39\x06\x51\xea\x6a\x4a\xdd\x72\xff\x36\xff\x36\xff\x37\xff\x36\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36\xff\x37\xff\x37' + b'\xff\x37\xff\x36\xff\x36\xfe\xd5\xfe\x33\xfe\x54\xe5\x71\xb4\x2e\x82\xcb\x61\xe9\x61\xe9\x93\x2c\xab\xcd\xa3\x6c\xb4\x0e\xdd\x31' + b'\xbc\x4e\xa3\xcd\xa3\xcd\xed\xb2\xfe\x74\xfe\xb5\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36' + b'\xff\x37\xff\x37\xff\x36\xff\x37\xff\x37\xff\x16\xff\x37\xff\x77\xff\x16\xfe\xd5\xfe\xd5\xff\x16\xff\x36\xff\x36\xff\x16\xfe\xf6' + b'\xff\x16\xff\x77\xff\x77\xff\x57\xff\x37\xff\x37\xff\x36\xff\x37\xff\x36\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x37\xff\x37\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x16\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x37\xff\x16\xff\x16\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37' + b'\xff\x37\xff\x37\xff\x37\xff\x36\xff\x36\xff\x36\xff\x37\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36\xff\x36' + b'\xff\x36\xff\x37\xff\x37\xff\x37\xff\x37\xff\x37\xff\x36\xff\x36\xff\x36\xff\x37\xff\x37\xff\x36\xff\x36\xff\x37\xff\x37\xff\x37' +) diff --git a/apps_market/Oreo Pet/assets/raw/__init__.py b/apps_market/Oreo Pet/assets/raw/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps_market/Oreo Pet/assets/raw/heart.png b/apps_market/Oreo Pet/assets/raw/heart.png deleted file mode 100644 index 248e66c..0000000 Binary files a/apps_market/Oreo Pet/assets/raw/heart.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/raw/panda_eat.png b/apps_market/Oreo Pet/assets/raw/panda_eat.png deleted file mode 100644 index 6804661..0000000 Binary files a/apps_market/Oreo Pet/assets/raw/panda_eat.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/raw/panda_happy.png b/apps_market/Oreo Pet/assets/raw/panda_happy.png deleted file mode 100644 index 35e78f4..0000000 Binary files a/apps_market/Oreo Pet/assets/raw/panda_happy.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/raw/panda_hungry.png b/apps_market/Oreo Pet/assets/raw/panda_hungry.png deleted file mode 100644 index 25d163b..0000000 Binary files a/apps_market/Oreo Pet/assets/raw/panda_hungry.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/raw/panda_sad.png b/apps_market/Oreo Pet/assets/raw/panda_sad.png deleted file mode 100644 index 657ede6..0000000 Binary files a/apps_market/Oreo Pet/assets/raw/panda_sad.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/raw/panda_sleep.png b/apps_market/Oreo Pet/assets/raw/panda_sleep.png deleted file mode 100644 index f376aa1..0000000 Binary files a/apps_market/Oreo Pet/assets/raw/panda_sleep.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/transparent/heart.png b/apps_market/Oreo Pet/assets/transparent/heart.png deleted file mode 100644 index a764407..0000000 Binary files a/apps_market/Oreo Pet/assets/transparent/heart.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/transparent/panda_eat.png b/apps_market/Oreo Pet/assets/transparent/panda_eat.png deleted file mode 100644 index a269041..0000000 Binary files a/apps_market/Oreo Pet/assets/transparent/panda_eat.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/transparent/panda_happy.png b/apps_market/Oreo Pet/assets/transparent/panda_happy.png deleted file mode 100644 index 8f48457..0000000 Binary files a/apps_market/Oreo Pet/assets/transparent/panda_happy.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/transparent/panda_hungry.png b/apps_market/Oreo Pet/assets/transparent/panda_hungry.png deleted file mode 100644 index e9636b5..0000000 Binary files a/apps_market/Oreo Pet/assets/transparent/panda_hungry.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/transparent/panda_sad.png b/apps_market/Oreo Pet/assets/transparent/panda_sad.png deleted file mode 100644 index 913193f..0000000 Binary files a/apps_market/Oreo Pet/assets/transparent/panda_sad.png and /dev/null differ diff --git a/apps_market/Oreo Pet/assets/transparent/panda_sleep.png b/apps_market/Oreo Pet/assets/transparent/panda_sleep.png deleted file mode 100644 index dd6da76..0000000 Binary files a/apps_market/Oreo Pet/assets/transparent/panda_sleep.png and /dev/null differ diff --git a/oreoOS/config.py b/oreoOS/config.py index 7b1232e..d33010d 100644 --- a/oreoOS/config.py +++ b/oreoOS/config.py @@ -18,7 +18,7 @@ def _load_env(): # OS version. tools/deploy.py auto-bumps the PATCH number on every push. # The literal MUST stay on its own line as `VERSION = "vN.N.N"` — the # deploy regex relies on that exact format to rewrite in place. -VERSION = "v1.4.26" +VERSION = "v1.4.28" # ISO-date stamp of the current VERSION. Updated by tools/release.py # (or by hand for hot-fix builds). Shown on the Updates page as the # "Latest stable as of …" line when no newer release is available. diff --git a/oreoOS/store.py b/oreoOS/store.py index df8bd73..fb74002 100644 --- a/oreoOS/store.py +++ b/oreoOS/store.py @@ -1,32 +1,3 @@ -"""App Store — remote catalogue of installable apps, fetched from -the project's GitHub repo and cached locally. - -Listing source -============== -We hit the GitHub Contents API for the `apps_market/` directory of the -OreoOS repo and treat every subfolder containing a `main.py` + a -`manifest.json` as an installable entry. For each entry we cache: - - {dir, name, icon_url, author, files: [{path, download_url, size}]} - -The cache lives at `/store_cache.json` on flash. A press in the Store -app overwrites it with a fresh fetch — otherwise the in-memory copy -stays sticky for the OS session so navigating in / out of the app -doesn't re-spend the API budget. - -Install -======= -`install(dir)` walks the cached `files` list, fetches each -`download_url`, and writes it to `apps/