Fix recents open failures, viewer flicker/buffering, add fast-scroll UX - #14
Merged
Merged
Conversation
Recents: - LocalDocumentMirror durably copies a document the first time it is readable and transparently substitutes that copy once a share-intent URI's temporary grant is revoked, fixing "Failed to open PDF" / "Couldn't read this spreadsheet" when reopening from Recents. PDF/PPT viewer: - Bitmap cache eviction was running on every scroll tick (and again on every render completion) using an undebounced "current page", evicting pages still transiting the viewport mid-scroll and forcing them to re-render from scratch — this was the flicker/black-flash/"buffering". Eviction is now a single debounced sweep; the redundant per-render eviction is removed. - Increased the bitmap cache radius and added directional prefetch (render a couple pages ahead of scroll direction) so a page is more often already rendered by the time it's reached in either direction. - Fixed the empty-page placeholder assuming A4 portrait, which collapsed ~2.5x on a landscape (converted .pptx) page and could loop the last page in and out of the viewport. Spreadsheet viewer: - xlsx now reads xl/styles.xml so date cells render as dates instead of raw serials, and honors hidden columns/rows like Excel does. The PDF export path now shares this same parser instead of a second, drifted copy. - Row-number gutter, pinned outside the horizontal scroll. - Stacking fast-flick fling (repeated fast swipes carry further, up to 4x, then hand off to the normal decay curve). - WPS-style row scrubber rail with a small liquid-glass "N/Total" badge (sized like the search icon, not a wide labeled pill). - Per-cell border()+ripple replaced with one drawBehind() grid-line pass per row and ripple-free taps — this is what made the fling above visible as "loads the next 100 rows after a pause" on long sheets. PPTX viewer: - Real slide renderer (PptxRenderer/OoxmlNode): true slide size, shape geometry inherited from layout/master, theme colors, embedded pictures, tables — replacing a converter that flattened every <a:t> into a portrait-A4 text dump. DOCX viewer: - DocxWebRenderer lays a .docx out with the vendored docx-preview + JSZip (Apache-2.0/MIT, ~48KB) in an offscreen WebView, then rasterizes it via the PrintDocumentAdapter path with a public-API slice-render fallback, keeping the original hand-written reflow as a last resort. Fully offline: the app declares no INTERNET permission. Onboarding: - Page 1: brightened the assembled book's later content lines (were a flat 0.62 alpha vs. 0.85 for the first line). - Page 4: added a per-format progress-dot row and an icon pop on cross-fade. - Page 6: replaced the generic checkmark-in-a-circle with the same six-format color ring from page 1, closing the loop the tour opened with instead of a stock "success" cliché. - GlassSearchHeader's open/close bounce is now symmetric (both used morph(); close had regressed to a fully rigid settle()). Localization: - Added Spanish (es) — full strings.xml translation, wired into Settings/Onboarding language pickers, LocaleHelper, and the per-app-language locale allowlist.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
LocalDocumentMirrornow saves a durable local copy the first time the file is readable and transparently falls back to it later.xl/styles.xmlwasn't read), hidden columns/rows are now honored like Excel, row-number gutter added, stacking fast-flick fling, and a WPS-style row scrubber with a compact liquid-glass "N/Total" badge. Per-cellborder()+ripple replaced with onedrawBehind()pass per row (this is what made the fling expose a stall on long sheets).PptxRenderer/OoxmlNode) — true slide size, shape geometry inherited from layout/master, theme colors, pictures, tables — replacing a converter that flattened every run of text into a portrait text dump.DocxWebRendererlays the document out with vendoreddocx-preview+JSZip(Apache-2.0/MIT, ~48KB total) in an offscreen WebView, rasterized viaPrintDocumentAdapterwith a public-API slice-render fallback; the original hand-written reflow stays as a last resort. Fully offline — noINTERNETpermission declared.GlassSearchHeader's bounce being springy on open but rigid on close.es) — full translation, wired into both language pickers,LocaleHelper, and the locale allowlist.Test plan