PDF viewer: a single tap while reading exits the document to a full-screen single-page view
- Dominant language
- Kotlin
- Stars
- 5.6k
- Forks
- 2k
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 92
Description
### ⚠️ Before posting ⚠️
- [X] This is a **bug**, not a question or an enhancement.
- [X] I've searched for similar issues and didn't find a duplicate.
- [X] I've written a clear and descriptive title for this issue.
- [X] I agree to follow Nextcloud's Code of Conduct.
### Steps to reproduce
1. Open a multi-page PDF from the Files list (native in-app viewer, not "open with" / browser).
2. Scroll down a few pages.
3. While reading, tap once anywhere on the page (no drag).
4. The app opens a separate full-screen view showing only that single page.
5. Press back → you return to the document but the reading/scroll position is lost (back near the top).
### Expected behaviour
A single tap on the page while reading should not leave the scrollable document, and the reading position must be preserved. Accidental taps are very frequent when reading a long PDF one-handed.
### Actual behaviour
`PreviewPdfAdapter` registers an `OnClickListener` on the whole page view. Any click on a page calls `PreviewPdfViewModel.onClickPage()`, which writes the page bitmap to a temp file and launches `PreviewBitmapActivity` — a separate full-screen activity showing only the tapped page, outside the scrollable `RecyclerView`. Coming back from it drops the reading position.
### Source (current `master`)
- `app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfAdapter.kt` L33-35 — `binding.root.setOnClickListener { onClickListener(bitmap) }`: whole-page click target, no gesture discrimination.
- `app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt` L79-92 — click → `viewModel.onClickPage(page)` → observer on `previewImagePath` starts `PreviewBitmapActivity`.
- `app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfViewModel.kt` L55-61 — `onClickPage()` saves the bitmap to cache and sets `_previewImagePath`.
### Android version
16
### Device brand and model
Xiaomi Poco X7 Pro 5G
### Stock or custom OS?
Stock (Xiaomi HyperOS)
### Nextcloud android app version
34.1.1
### Nextcloud server version
34.0.3
### Using a reverse proxy?
Yes (Traefik) — not relevant, PDF rendering is fully client-side.
### Additional information
The full-screen single-page view appears intended as a "tap to zoom" feature, but bound to a plain click on the entire page it fires on every accidental tap during reading. Possible directions: require a double-tap for the zoom view, shrink the tap target, or at least preserve/restore the `RecyclerView` scroll position when returning from `PreviewBitmapActivity`.
Contributor guide
Research direction
Start by tracing the click flow in PreviewPdfAdapter.kt, PreviewPdfFragment.kt, and PreviewPdfViewModel.kt, beginning with the adapter's whole-page OnClickListener. Use the reproduction steps to compare gesture behavior and navigation before and after the change. Done means a single tap while reading does not unexpectedly open the separate full-screen page view and the reading position is preserved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin
- Domain
- mobile-dev
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 72/100