Skip to content

Label the consent prompt's confirm button "Continue" - #2095

Draft
TheBlackBit wants to merge 2 commits into
openwallet-foundation:mainfrom
TheBlackBit:feat/consent-continue-button
Draft

TheBlackBit wants to merge 2 commits into
openwallet-foundation:mainfrom
TheBlackBit:feat/consent-continue-button

Conversation

@TheBlackBit

@TheBlackBit TheBlackBit commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Label the consent prompt's confirm button "Continue" for every request instead of "Share", as Google Wallet does. Authentication usually follows the prompt, and the same word fits a request that approves a transaction as well as one that shares claims:

  • Consent in Compose and SwiftUI says "Continue". It still says "More" while there is content below to scroll to.
  • Adds credential_presentment_button_continue for all locales and removes the unused credential_presentment_button_share.
  • Adds credential_presentment_details for all locales, for the title of the details page from Add consent prompt extension points for transaction data #2094.
  • Adds credential_presentment_back for all locales, as the content description of the prompt's back buttons.

Depends on #2094; only the last commit is new here.

Fixes #2096.

Test: ./gradlew :multipaz-compose:lokalizeCheck

Ever Morales added 2 commits October 26, 2026 16:46
Add an extension point so wallets can draw transaction data in the
consent prompt with their own views instead of the built-in rendering,
without replacing the prompt. Renderers are looked up by transaction
type identifier and passed to the prompt with each consent request:

- Add `TransactionDataRenderer`, an abstract class in core, and
  `TransactionDataRendererRepository`, which maps a transaction type
  identifier to a renderer and can be subclassed to pick renderers per
  request.
- Add a `transactionDataRendererRepository` parameter to
  `promptModelRequestConsent()` and `PromptModel.requestConsent()` and
  carry it in `ConsentPromptDialogModel.ConsentPromptRequest`, so it
  also reaches the consent prompts shown by SDK-hosted screens such as
  `PresentmentActivity`.
- Add `TransactionDataContext`, which gives a renderer the items of one
  type, the requester and its trust status, whether claims are also
  disclosed, the user input, and a callback opening the details page.
- Add `TransactionDataRendererCompose` in `multipaz-compose`, with a
  summary drawn in the prompt and an optional details view drawn on a
  page inside the same sheet. The details page has no confirm button.
- Draw all items of a type with a renderer in one call, in the place of
  the first of them. Types without a renderer, and renderers made for
  another UI toolkit, keep the built-in rendering.
- Take the repository directly in `Consent` and
  `ConsentModalBottomSheet`, for applications showing them themselves.
- Add `ConsentData.containsTransactionType()`, so an application can
  check whether a request carries a given type, for example to show its
  own prompt instead.
- Title the details page "Details" and label its back button "Back", in
  plain English for now; both become translated string resources
  separately.
- Document the rules renderers must follow, as transaction data comes
  from the relying party: show payload strings as plain text, show a
  merchant that differs from the requester, and keep everything signed
  reachable on the details page. Show how to pass the repository from a
  `SimplePresentmentSource`.

Default arguments are not exported to Swift, so Swift callers of
`promptModelRequestConsent()` now pass `transactionDataRendererRepository:`
explicitly, as `samples/SwiftTestApp` does. A callable reference to it no
longer fits `ShowConsentPromptFn` inside a conditional either, so
`samples/testapp` wraps it in a lambda.

Fixes openwallet-foundation#2018.

Test: New TransactionDataRendererRepositoryTest, ShowConsentPromptTest,
      ConsentDataTest and TransactionDataBlocksTest.
Test: Ran ./gradlew :multipaz:jvmTest
Test: Ran ./gradlew :multipaz-compose:iosSimulatorArm64Test
Test: Ran ./gradlew :multipaz:detektMetadataCommonMain
      :multipaz-compose:detektMetadataCommonMain
Test: Ran ./gradlew :samples:testapp:compileBlueDebugKotlinAndroid
      :samples:testapp:compileKotlinIosSimulatorArm64
      :samples:testapp:compileKotlinWasmJs
      :multipaz-compose:compileKotlinJs :multipaz-compose:compileKotlinWasmJs
Test: Built samples/SwiftTestApp for the iOS simulator. With Xcode 27.1
      this needs a local alias for `Document`, which the new SDK makes
      ambiguous with `SwiftUI.Document`; main is affected the same way.
Signed-off-by: Ever Morales <ever.morales@koombea.com>
Use "Continue" as the confirm button label for every consent request,
as Google Wallet does, instead of "Share". Authentication usually
follows the prompt, so the button continues to that step, and the same
label fits requests that approve a transaction as well as those that
share claims:

- Replace the "Share" label with "Continue" in `Consent` in
  `multipaz-compose` and `multipaz-swiftui`. The button still reads
  "More" while there is content below to scroll to.
- Add the `credential_presentment_button_continue` string for all
  locales and remove the unused `credential_presentment_button_share`.
- Add the `credential_presentment_details` string for all locales and
  use it for the title of the consent prompt's details page in
  `multipaz-compose`, instead of plain English text.
- Add the `credential_presentment_back` string for all locales and use it
  as the content description of the consent prompt's back buttons, so
  screen readers announce them. The requester information page's back
  button had none.

Test: Ran ./gradlew :multipaz-compose:lokalizeCheck; the only missing
      translations left are the `face_matcher_*` strings, which are also
      missing on main.
Test: Ran ./gradlew :samples:testapp:compileBlueDebugKotlinAndroid
      :samples:testapp:compileKotlinIosSimulatorArm64
Test: Built samples/SwiftTestApp for the iOS simulator. With Xcode 27.1
      this needs a local alias for `Document`, which the new SDK makes
      ambiguous with `SwiftUI.Document`; main is affected the same way.
Signed-off-by: Ever Morales <ever.morales@koombea.com>
@TheBlackBit
TheBlackBit force-pushed the feat/consent-continue-button branch from ca66320 to 919914a Compare October 26, 2026 22:50

This branch has not been deployed

No deployments
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.

Consent prompt: label the confirm button "Continue" instead of "Share"

1 participant