Skip to content

[Feature][Android] Add fixed Lynx viewport support - #120

Open
Huxpro wants to merge 1 commit into
tiktok:agent/android-lynx-builder-configfrom
Huxpro:agent/android-fixed-viewport
Open

[Feature][Android] Add fixed Lynx viewport support#120
Huxpro wants to merge 1 commit into
tiktok:agent/android-lynx-builder-configfrom
Huxpro:agent/android-fixed-viewport

Conversation

@Huxpro

@Huxpro Huxpro commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add a typed fixed Lynx viewport for Android Sparkling pages, preserving the historical physical-pixel width + height behavior without exposing LynxViewBuilder.

This is the second layer of the Android compatibility stack and depends on #119.

Related issues

Standalone compatibility enhancement for host containers migrating legacy Lynx launch URLs.

Changes

  • Add SparklingLynxViewport for positive physical-pixel dimensions.
  • Parse canonical width and height with Legacy-compatible last-valued duplicate semantics.
  • Resolve programmatic init params, context values, and scheme values in that order.
  • Apply exact preset measure specs before LynxView construction.
  • Apply matching child layout params while preserving full-size defaults when unset or invalid.
  • Add unit coverage and a device instrumentation fixture that can wait for real first-screen rendering when the bundle is packaged.
  • Document the scheme and Android APIs in English and Chinese.

How to test

  • cd packages/playground/android && ./gradlew :sparkling:testDebugUnitTest --tests com.tiktok.sparkling.SparklingLynxViewportTest --tests com.tiktok.sparkling.SparklingViewTest --tests com.tiktok.sparkling.utils.SchemeParserTest --tests com.tiktok.sparkling.hybridkit.lynx.LynxKitInitParamsTest --no-daemon
  • cd packages/playground/android && ./gradlew :app:assembleDebugAndroidTest --no-daemon
  • PATH=/tmp/sparkling-ktlint-bin:$PATH scripts/lint.sh kotlin

Cloud-device execution of FixedLynxViewportInstrumentedTest will be attached before this PR is considered complete.

Stack

Checklist

  • I read CONTRIBUTING.md.
  • I explained why this is standalone.
  • I ran relevant checks.
  • I updated docs.
  • I added tests.

Device validation complete

The durable SG1 + Lynx Sandbox acceptance matrix is now available in #131. Exact validated commit: 8a2b3ea99eaa342e2f1ebfe716aefbb44f411fbb. On a fresh aries_10 device (Android 10 / API 29), all 9 tests passed, including real first-screen rendering, fixed 320x480, shared density 3.25 across two independent Lynx views, PART_ON_LAYOUT, typed template fetch invocation, orientation, retry recovery, and unsafe configuration rejection. The runner dynamically leases/releases the device and archives logs/screenshots/hashes. Evidence archive on SG1: /tmp/sparkling-android-device-acceptance-8a2b3ea.tar.gz (SHA-256 09acd64b4b63988b61e7f4f2ff11f3f7b4b4770bd3ef74a973db6dda0c9e242c).

Expanded durable device validation

The checked-in SG1 + Lynx Sandbox matrix in #131 now validates exact commit df875a87541d587ab8aa84a86600c0610f9e44c7 with 10/10 PASS on aries_10 (Android 10 / API 29). Added runtime coverage includes: the pre-load listener observing a ready bridge before template fetch; the global per-page fetcher factory; real first-screen rendering for ALL_ON_UI, MOST_ON_TASM, PART_ON_LAYOUT, and safe MULTI_THREADS; and full-page fixed-viewport + MULTI_THREADS rejection before Activity launch or transfer-station save. The runner requires a clean exact HEAD and fails closed unless Sandbox release confirms the leased serial. Evidence: /tmp/sparkling-android-device-acceptance-df875a8; archive SHA-256 712a3b83dbd78eabeae9afc0766b5b191cee0bff10e515967b3ae9f46c4feb98.

Summary of change:
- Add a typed positive physical-pixel viewport for schemes and native hosts.
- Apply exact preset measure specs before LynxView construction and fixed child layout params.
- Match Legacy last-valued duplicate width and height query semantics.
- Preserve full-size defaults while ignoring incomplete or unsafe raw dimensions.
- Cover parsing, precedence, builder specs, hosted layout, and rendered device flow.
- Document scheme and programmatic Android APIs in English and Chinese.

TEST: /home/xuan.huang/.gradle/wrapper/dists/gradle-8.2-all/6mxqtxovn2faat1idb7p6lxsa/gradle-8.2/bin/gradle :sparkling:testDebugUnitTest --tests com.tiktok.sparkling.SparklingLynxViewportTest --tests com.tiktok.sparkling.SparklingViewTest --tests com.tiktok.sparkling.utils.SchemeParserTest --tests com.tiktok.sparkling.hybridkit.lynx.LynxKitInitParamsTest --no-daemon
TEST: PATH=/tmp/sparkling-ktlint-bin:$PATH scripts/lint.sh kotlin
TEST: /home/xuan.huang/.gradle/wrapper/dists/gradle-8.2-all/6mxqtxovn2faat1idb7p6lxsa/gradle-8.2/bin/gradle :app:assembleDebugAndroidTest --no-daemon

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant