69 lines
4.1 KiB
Markdown
69 lines
4.1 KiB
Markdown
# 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.
|