• Mahmoud Aglan's avatar
    feat: download, zip/unzip, PDF export, and ten quality-of-life fixes · 90a71482
    Mahmoud Aglan authored
    Files
    - Download to the phone (Android's save dialog) or Share — a file, a folder
      as .zip, or a multi-selection. Streamed to disk with progress and Cancel.
    - Long-press selects; a selection zips, downloads, shares or deletes. A ⋮
      on every row carries the per-file actions.
    - Compress to .zip and Extract, always into a new folder (the server never
      overwrites). Tapping a .zip lists its contents first.
    - Export as PDF, made on the phone: markdown (tables, Arabic RTL, repo
      images inlined, mermaid rendered to SVG in a headless WebView because the
      print WebView runs without JavaScript), code as a numbered highlighted
      listing, images, a folder's markdown as one document with contents, and a
      whole chat. Saved to the phone, shared, or put into the repo beside the
      source under a name that never overwrites.
    
    Quality of life
     1. Retry / Edit & resend under a failed run.
     2. Per-chat drafts that survive leaving the chat.
     3. Quick-prompt chips; save your own, long-press to remove.
     4. Screen stays on while a watched run is live (toggle in Settings).
     5. Image preview with pinch and double-tap zoom.
     6. Copy path, and "Ask Claude about this": a new chat, path pre-typed.
     7. Files reopens the folder last used in each project.
     8. Sort by name, date or size; size and age on every row.
     9. Git lists changed files per repo; each opens its own diff with a +/−
        count and Discard for unstaged changes; untracked files show as new.
    10. Text size in Settings, app-wide and in the code editor (re_editor
        ignores the app text scale, so it is applied there explicitly).
    
    Fixes
    - File and Git actions never read the server's answer. A 200 carrying
      ok:false — a rejected push, a pull that cannot fast-forward — showed
      "Pushed"/"Pulled", and a refused delete said nothing.
    - Uploads over 48 MB are refused before sending, with the reason.
    - R8 keep rules for printing's android.print bridge; verified in the
      release mapping that PdfConvert and its callbacks keep their names.
    - Version 1.4.0+14; Settings no longer claims 1.0.0.
    
    Tests: test/pdf_export_test.dart (8) — span-balanced listing rows, escaping,
    language detection, download names, and markdown image paths that cannot
    climb out of the project.
    Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    90a71482
pubspec.yaml 2 KB