Skip to content

feat: clearer feedback across the identification/save flow - #29

Open
gwado wants to merge 1 commit into
patrickjane:masterfrom
gwado:feat/identification-flow-feedback
Open

feat: clearer feedback across the identification/save flow#29
gwado wants to merge 1 commit into
patrickjane:masterfrom
gwado:feat/identification-flow-feedback

Conversation

@gwado

@gwado gwado commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

⚠️ New feature, not a bug fix. This changes existing app behavior — feel free to close if it's out of scope for the project.

Summary

Three related UX improvements to the identify → results → save flow:

  • RequestPage now stays visible with its own loading indicator while an identification request is in flight, instead of popping back to MainPage immediately and showing a generic spinner there with no visible connection to what triggered it. On success it pops itself and pushes ResultsPage directly; on error it stays put so the user can retry without re-adding all their photos.
  • Identification::identifyPlant() now classifies failures instead of always reporting a raw "(err/code)" pair: invalid/rejected API key (401/403), quota exceeded (429), server error (5xx), unreachable network, or a generic fallback, each with a clear message. The identificationResult signal gained an errorCode alongside the existing message so QML can react differently per case — in particular, an invalid-key error now offers to open Settings directly from the error dialog, instead of only surfacing this after the user has already taken photos and started a request.
  • Saving a result now shows a brief "Plant saved" toast before returning to the saved-plants list, instead of popping back to MainPage with no visible confirmation that the save succeeded.

Type of change

New feature

Test plan

  • clickable build --arch arm64 builds cleanly; the produced package passes clickable's click-review.
  • Built and installed on a physical Pixel 3a (arm64): ran a full identification request end-to-end, confirmed the loading indicator now stays on the request page, and confirmed the save confirmation toast appears before returning to the saved-plants list.
  • The specific error-classification branches (invalid key, quota, server error, offline) were validated by code review/tracing, not reproduced live against Pl@ntNet's API on-device (would require deliberately breaking each condition).

Notes

  • No user-facing strings changed in po/ in a way that needs an update for this PR — the new "Plant saved" string and the four new error messages are not yet in po/plants.s710.pot; happy to run the translation template update if you'd like it included here.

Three related UX improvements to the identify -> results -> save flow:

- RequestPage now stays visible with its own loading indicator while
  an identification request is in flight, instead of popping back to
  MainPage immediately and showing a generic spinner there with no
  visible connection to what triggered it. On success it pops itself
  and pushes ResultsPage directly; on error it stays put so the user
  can retry without re-adding all their photos.

- Identification::identifyPlant() now classifies failures instead of
  always reporting a raw "(err/code)" pair: invalid/rejected API key
  (401/403), quota exceeded (429), server error (5xx), unreachable
  network, or a generic fallback, each with a clear message. The
  identificationResult signal gained an errorCode alongside the
  existing message so QML can react differently per case - in
  particular, an invalid-key error now offers to open Settings
  directly from the error dialog, instead of only surfacing this after
  the user has already taken photos and started a request.

- Saving a result now shows a brief "Plant saved" toast before
  returning to the saved-plants list, instead of popping back to
  MainPage with no visible confirmation that the save succeeded.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant