initial commit v 0.2.0
Verify source and build Android / android (push) Canceled after 0s

This commit is contained in:
2026-09-24 22:49:27 +02:00
commit db873063f8
129 changed files with 7512 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
# Continuation brief
## User objective
Replace the routine act of opening mobile file attachments in Google/Microsoft apps with an
account-free local viewer. Android first; preserve an iOS path through reusable core logic.
Do not turn this into a storage cloud or a new full Office suite as the first deliverable.
## Current source
Read `README.md`, `FEATURES.md`, `ARCHITECTURE.md`, `SECURITY.md`, `BUILD.md` and `VALIDATION.md`.
Android Kotlin/Compose implementation, isolated PDF service, JVM ZIP adapter and genuine common
Kotlin reading-preview parsers are present. 112 offline core/JVM checks passed. Android and Apple
builds have not completed; Android bootstrap attempts fail before compilation. The archive contains no APK and no LibreOffice binary.
## Browser addition in 0.2.0
Read `BROWSER.md` and `BROWSER_ACCEPTANCE.md`. Native SAF folder browsing and a separate GET_CONTENT
picker are implemented, with APP_FILES/directory VIEW registration. Shared browser models, sort/filter,
MIME/selection policy and streamed-copy limits are in commonMain. Android adapters own grants, metadata,
opt-in thumbnails and copied FileProvider results. Exported activity extras are sanitized before
SavedStateHandle defaults are created. Do not remove that protection or forward directory grants.
No broad storage access, all-files permission, raw-path enumeration, file mutation, persistent picker
result or replacement system DocumentsUI is implemented. Android 11+ root/Downloads restrictions are
intentional and explained in the UI. The debug-only fixture DocumentsProvider is for tests only.
## First actions
Bootstrap the official checksum-verified Gradle wrapper on a connected build machine; install the
pinned Android SDK/JDK tooling; resolve/build/test/lint. Fix all actual compile/runtime issues before
extending formats. Run `ViewerSmokeTest`, `BrowserIntegrationTest`, and the manual distinct-UID real-provider flows. Preserve known limitations
in the UI and documentation. Update the validation report only with commands actually run.
## Non-negotiable boundaries
Keep originals read-only; explicit copy/export/share only. Do not add INTERNET, all-files access,
telemetry or account requirements to solve a document-opening problem. A selected provider may
have independent networking. Do not execute scripts/macros/formulas or load external resources.
Keep input/output/ZIP/XML/repetition limits enforced during parsing. Never extract archive paths to
the filesystem. Preserve capability/fidelity labels and explicit error recovery.
Keep Android types out of commonMain. `platform-jvm` is not the iOS implementation. Use the configured
Apple framework and build a native ZIP/file/PDF adapter later. Do not call an untested interface or
placeholder native bridge an implemented engine.
## Known areas for review
Custom preview XML parser is bounded but not schema/namespace validating. Office previews omit
substantial content. PDF IPC, worker cancellation/lifecycle and actual device memory need testing.
Image EXIF/animation handling is absent. Export/share jobs and cache cleanup need race tests. UI
strings are currently English and mostly inline; move them to a localization layer before adding
languages. Dependency locking/verification/SBOM requires an actual resolved build.
Follow the implementation slices in `ROADMAP.md`, with measurable acceptance results. Keep source
and documentation complete in each release ZIP. Do not commit user documents, local SDK paths,
private signing keys or generated build caches.
## Continuation from 0.2.3
Current requested baseline: Gradle 8.14.5, installed JDK 17, Kotlin 2.2.21, AGP 8.11.1.
All sources and SAF-D1 diagnostics are integrated; no patch step remains. Check
`docs/VALIDATION.md` before claiming build/device success. The persistent folder
failure is unresolved; obtain the exact new message after confirming the 0.2.3 /
SAF-D1 footer. Do not infer permission failure from retained-grant=false alone.
Do not upgrade the build toolchain or add a duplicate root Kotlin JVM plugin to
investigate the storage-provider issue. Current pins are checked offline by
`scripts/check-build-config.py` as well as by Gradle settings at configuration time.