Skip to content

Commit d3ca078

Browse files
committed
[build] package Google Play open-testing handoff
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 768fafe commit d3ca078

16 files changed

Lines changed: 1366 additions & 0 deletions

‎CHANGELOG.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ The current compatible app feature set now targets `0.2.0`; build `5` was
1313
handed off through Transporter for TestFlight. This candidate identity improves
1414
test and evidence traceability but does not designate a qualified store release
1515
or claim App Store Connect processing, beta-review approval, or availability.
16+
The next prepared Android open-testing candidate is `0.2.0 (8)`; its bundle
17+
and submission packet do not claim Play submission, approval, or rollout.
1618

1719
### App source
1820

21+
- Added a full offline Privacy policy route from About, with the published
22+
policy, effective date and privacy contact. Reading it preserves the live
23+
board session, editor, Blocks and console state, including at large text
24+
sizes. Advanced the shared app candidate identity to `0.2.0+8`.
1925
- Added Python syntax highlighting and synchronized one-based line numbers to
2026
the editor while retaining the plain-field fallback, offline boundary,
2127
smart-punctuation protection, and safe external-keyboard Tab behavior.
@@ -71,6 +77,10 @@ or claim App Store Connect processing, beta-review approval, or availability.
7177

7278
### Website and repository source
7379

80+
- Prepared Google Play open-testing listing text, reviewer hardware setup,
81+
tester instructions, data-use assessment, and reproducible store artwork
82+
with authentic screenshot provenance. Store availability remains a separate
83+
Console handoff.
7484
- Added a static `/learn` center with ten ordered, accessible tutorials covering
7585
exact five-profile setup, the first BLE program, Files and multi-delete,
7686
pinned public GitHub import, Blocks, the complete 32-example development

‎docs/README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ bundled offline examples required by its own product contracts.
5858

5959
## Testing and release handoff
6060

61+
- [Google Play open-testing submission packet](publication/google-play-open-testing.md)
62+
— app `0.2.0 (8)`, listing fields, graphics, declarations and tester setup
6163
- [PyBLE 0.2.0 (5) TestFlight description and test
6264
plan](testing/testflight/0.2.0-build-5.md)
6365
- [PyBLE 0.1.0 (4) TestFlight description and test
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
<!-- SPDX-License-Identifier: MIT -->
2+
<!-- Part of PyBLE (https://pyble.dev) — see /LICENSE. -->
3+
4+
# Google Play graphics and screenshot package
5+
6+
Prepared for the English open-testing listing on 2026-09-10. The submission
7+
instructions and store copy are in
8+
[google-play-open-testing.md](google-play-open-testing.md).
9+
10+
## Upload requirements checked on 2026-09-10
11+
12+
| Asset | Format and dimensions |
13+
| --- | --- |
14+
| App icon | 512 × 512, 32-bit PNG, at most 1024 KB |
15+
| Feature graphic | 1024 × 500, JPEG or 24-bit PNG without alpha |
16+
| Screenshots | At least two across device types; up to eight per type; JPEG or 24-bit PNG without alpha; 320–3840 px; longest side at most twice the shortest |
17+
18+
Google recommends four app screenshots at 1080 px or higher in 16:9 landscape
19+
or 9:16 portrait for screenshot-based promotion. Its large-screen guidance
20+
also calls for four screenshots and those aspect ratios. Provide accurate
21+
device-specific captures and concise alt text. These are separate from the
22+
basic screenshot upload limits. See the official
23+
[preview asset requirements](https://support.google.com/googleplay/android-developer/answer/9866151?hl=en).
24+
25+
## Artwork
26+
27+
The canonical icon is
28+
[`app/assets/branding/pyble-google-play-512.png`](../../app/assets/branding/pyble-google-play-512.png).
29+
The package copies it without changes. It is derived from the project's MIT
30+
Prompt Chip SVG; see the
31+
[branding provenance](../../app/assets/branding/README.md).
32+
33+
The feature graphic is authored as
34+
[`pyble-google-play-feature.svg`](../../tools/publication/pyble-google-play-feature.svg)
35+
and exported as `pyble-feature-1024x500.png`. The text is:
36+
37+
> PyBLE
38+
>
39+
> MicroPython. Over Bluetooth.
40+
>
41+
> Build ideas on a compatible board.
42+
>
43+
> Editor · Blocks · Console · Files
44+
45+
This is a fresh editorial vector composition using the canonical PyBLE mark,
46+
navy/blue palette, and a simple code/wireless illustration. It is not an app
47+
screenshot. It includes no stock artwork, generated raster artwork, third-party
48+
logos, store badges, or iPad imagery. Text uses the installed Helvetica Neue
49+
and Menlo system fonts during raster export; no font files are redistributed.
50+
51+
| Asset | Alt text |
52+
| --- | --- |
53+
| Icon | PyBLE blue microcontroller with a white terminal prompt on a navy background. |
54+
| Feature graphic | PyBLE: MicroPython over Bluetooth, with a code prompt and wireless signal illustration. |
55+
56+
## Reproducible local package
57+
58+
The completed package contains twelve upload PNGs, plus the asset manifest
59+
and SHA-256 list, in the ignored workspace:
60+
61+
```text
62+
local/publication/google-play/open-testing-2026-09-10/store-assets/
63+
pyble-icon-512.png
64+
pyble-feature-1024x500.png
65+
phone/ # 3 current signed-build captures
66+
tablet-7-inch/ # 3 current signed-build captures
67+
tablet-10-inch/ # 4 reviewed physical-device feature captures
68+
asset-manifest.json
69+
SHA256SUMS
70+
```
71+
72+
To export the icon and feature graphic alone:
73+
74+
```sh
75+
python3 tools/publication/prepare_google_play_assets.py \
76+
--output-dir local/publication/google-play/open-testing-2026-09-10/artwork-new
77+
```
78+
79+
The script requires Python 3.9+, Inkscape, and ImageMagick. It refuses to
80+
overwrite an existing output directory. It writes an `asset-manifest.json`
81+
with dimensions, SHA-256 hashes, source provenance, and alt text, plus
82+
`SHA256SUMS`. The PNG outputs have the required color formats; the feature
83+
graphic has no alpha channel.
84+
85+
For a screenshot set, pass `--capture-manifest` with a local JSON file whose
86+
`environment` records app/package/build/device/source provenance and whose
87+
`screenshots` contains `source`, `device_type`, `order`, `key`, and `alt_text`
88+
for every capture. Source paths are relative to the manifest. Device types are
89+
`phone`, `tablet-7-inch`, and `tablet-10-inch`. An optional `crop` records exact
90+
`x`, `y`, `width`, and `height` to remove OS bars. The script checks dimensions,
91+
strips metadata, converts to 24-bit PNG, and requires zero changed pixels
92+
against every source or exact crop. It does not resize, annotate, or retouch
93+
app content.
94+
95+
To reproduce the complete package, retaining the existing reviewed output:
96+
97+
```sh
98+
python3 tools/publication/prepare_google_play_assets.py \
99+
--output-dir local/publication/google-play/open-testing-2026-09-10/store-assets-new \
100+
--capture-manifest local/publication/google-play/open-testing-2026-09-10/capture-manifest.json
101+
```
102+
103+
## Physical tablet captures
104+
105+
The four reviewed captures below come from a physical Lenovo TB-J616X running
106+
Android 12, PyBLE 0.2.0 build 5, on 2026-08-28. The installed capture package was
107+
`dev.pyble.pyble.tutorialcapture`, built from
108+
`4df378fc76c919f0e2481eb5b668f14115d38587`. These are real board sessions, with
109+
the displayed PyBLE agent version 0.6.0. The capture build is not a Play binary.
110+
111+
These four app surfaces remain representative of the current source: the only
112+
`app/lib/` change between that capture revision and preparation baseline
113+
`ebbb427a17aacf58bdd7ea150520e63a6fb48acd` is a documentation-only change to
114+
`pble/hello.dart`. The open-testing preparation adds an About privacy action
115+
and policy page; it does not change the four depicted surfaces. Preserve this
116+
provenance instead of relabeling these as newly captured build-8 images.
117+
118+
The source provenance contains original raw hashes, crop geometry, and device
119+
and board session details:
120+
[five-board screenshot record](../testing/tutorial-five-board-screenshot-provenance-2026-08-28.md).
121+
Each reviewed frame is the original 2000 × 1092 app region, with only Android
122+
system bars removed by the earlier reviewed crop. Those dimensions satisfy
123+
the basic upload limits, but do not have the preferred 16:9 promotional ratio.
124+
Retain the honest geometry; a future physical capture at 16:9 can replace it.
125+
126+
Upload these under **10-inch tablet screenshots**, in this order:
127+
128+
| Order / output filename | Source under `tools/web/public/learn/app/` | Alt text |
129+
| --- | --- | --- |
130+
| `01-editor-console.png` | `pyble-app-0.2.0-build-5-first-program-editor-console-f6928eea293b.png` | MicroPython editor, board files and Console showing Hello from PyBLE on a connected board. |
131+
| `02-blocks-python.png` | `pyble-app-0.2.0-build-5-blocks-hello-workspace-adc069d73fba.png` | Blocks workspace with a Hello, PyBLE print block and the generated Python shown alongside it. |
132+
| `03-board-discovery.png` | `pyble-app-0.2.0-build-5-setup-five-board-scan-a89dedab7efc.png` | Bluetooth discovery lists five nearby PyBLE boards with signal strength and a Scan again control. |
133+
| `04-example-import.png` | `pyble-app-0.2.0-build-5-examples-import-complete-65fc3f839336.png` | A public Python example has downloaded to the board; the app confirms it was not opened or run automatically. |
134+
135+
The images were visually reviewed again for this package. They show only public
136+
tutorial content, intentional documentation-board identifiers, and expected
137+
app state. No account, private repository, token, notification, personal file,
138+
debug badge, or device overlay appears in the selected app regions.
139+
140+
There is no video, Chromebook, TV, Wear OS, car, or XR asset in this package.
141+
Do not duplicate tablet images into phone slots or describe
142+
the existing iPad website hero as an Android capture.
143+
144+
## Current phone and 7-inch tablet captures
145+
146+
The production app shows its connection screen until a real compatible board
147+
is ready; the IDE cannot be reached without that connection. Emulator captures
148+
must preserve this actual state. The local Android emulator can supply current
149+
connection/About images, but cannot supply genuine connected board, Python
150+
execution, or file-transfer evidence.
151+
152+
The completed local manifest records exact capture builds, display geometry,
153+
density, and screenshot filenames. Use its `phone/` output directory for the
154+
phone slot and `tablet-7-inch/` for the 7-inch slot. Emulator screenshots
155+
supplement the physical tablet feature images; they do not replace hardware
156+
validation for the release candidate.
157+
158+
The six current screenshots were captured on 2026-09-10 from the signed
159+
production APK, `dev.pyble.pyble`, version **0.2.0 (8)**:
160+
161+
- Source commit: `768fafe45beee7731d1a38480cc0463a2f5680cd`.
162+
- App tree: `27fd1a264a576e68126c38f966db328559660249`.
163+
- APK SHA-256: `3c98983a995c657f10a398d7b0f65a07c2d2af18e07c30e7d5dfc094eefcbdcf`.
164+
- OS: Android 14 / API 34, using the installed Google APIs ARM64 system image.
165+
- Phone: isolated phone AVD based on the Pixel 3a profile, 420 dpi, raw runtime
166+
display 1080 × 2046. The exact `1080x1920+0+63` crop removes 63-pixel status
167+
and navigation bars and retains the complete app region.
168+
- 7-inch tablet: isolated Nexus 7 2013 AVD, 320 dpi, native 1200 × 1920,
169+
captured in landscape at 1920 × 1200. The exact `1920x1032+0+48` crop removes
170+
the 48-pixel status bar and 120-pixel Android taskbar. This preserves the
171+
entire app region and excludes other apps' taskbar icons.
172+
- Default font scale 1.0, real disconnected app state, no account or board.
173+
No source code, providers, or connection results were changed for capture.
174+
175+
The phone PNGs are 1080 × 1920. The 7-inch PNGs are 1920 × 1032 and meet the
176+
basic screenshot limits; they do not meet the preferred 1080-pixel minimum
177+
short edge and 16:9 ratio for large-screen promotion. Neither the three-image
178+
phone set nor the three-image 7-inch set claims the four-image promotional gate.
179+
180+
For **each** of the phone and 7-inch slots, upload in this order:
181+
182+
| Filename | Alt text |
183+
| --- | --- |
184+
| `01-setup.png` | PyBLE connection screen explains that a compatible board running the PyBLE agent is needed to edit and run MicroPython. |
185+
| `02-about.png` | About PyBLE shows version 0.2.0 (8) and describes the open-source MicroPython IDE. |
186+
| `03-privacy.png` | The in-app PyBLE Privacy Policy explains local work, project ownership and the optional public GitHub import. |
187+
188+
The APK installed and launched successfully on both configurations. The native
189+
flow **Setup → About → Privacy policy → Android Back → About → Android Back →
190+
Setup** passed on both, with visible titles verified in UI hierarchy captures.
191+
The About page displayed the correct version and build. Visual review found no
192+
clipped labels, debug badge, app crash, private content, or unrelated device
193+
overlay in the exported app regions. Raw images and UI evidence remain under
194+
`local/publication/google-play/open-testing-2026-09-10/raw/`; the result is
195+
recorded in `native-ui-smoke.json` beside `capture-manifest.json`.
196+
197+
All ten screenshot exports passed exact pixel comparisons after the documented
198+
system-bar crops and RGB conversion. These checks establish capture integrity
199+
and native UI navigation; they do not establish BLE behavior on physical
200+
hardware. The isolated emulator instances were stopped after capture without
201+
saving snapshots; the user's original AVD configurations were not edited.

0 commit comments

Comments
 (0)