SAP

Manage my Account SAP Devs YouTube ↗ Learnings ↗ Community ↗ Provide Feedback ↗
Logout
⤢ Open full site

Customize the Jetpack Compose Onboarding Flow

Learn how to customize the UI screens and add your own logic with extension points for the Jetpack Compose onboarding flow of SAP BTP SDK for Android.

Overview

You will learn

  • ✔How to customize the UI screens for the Jetpack Compose onboarding flow
  • ✔How to add your own logic by listening to the flow states
  • ✔How to insert your own logic using the action handler
Haoyue Feng H Haoyue Feng August 21, 2026
Created on May 8, 2024
Contributors

More from Haoyue Feng

See all 12 tutorials by Haoyue Feng →

Prerequisites

Steps

Details

You will learn

  • How to customize the UI screens for the Jetpack Compose onboarding flow
  • How to add your own logic by listening to the flow states
  • How to insert your own logic using the action handler

Step 1 Customize the UI screens for the Jetpack Compose onboarding flow
—

The onboarding flow is comprised of the following UI components:

  • End user license agreement (EULA) screen
  • Activation screen
  • Authentication screen
  • Set passcode and verify passcode screens
  • Usage consent screen and crash report consent screens.

The visibility and the content of each screen will vary depending on the different application configurations and client code customization.

  1. By default, the first screen of the onboarding flow is the EULA screen. This screen allows users to review and agree to the end user license agreement. To exclude this screen, set the value of useDefaultEulaScreen parameter to false for the FlowOptions instance and set this FlowOptions instance for the FlowContext instance to start the onboarding flow.
Kotlin
val flowContext = FlowContext(
    appConfig = appConfig,
    flowOptions = FlowOptions(
        useDefaultEulaScreen = false
)
FlowUtil.startFlow(activity, flowContext)

Notice that if the EULA screen is excluded, it will be the responsibility of the client code to handle the end user license agreement.

  1. If the AppConfig instance in FlowContext does not provide the authentication info or host for the mobile application, the activation screen will be displayed to get the complete AppConfig from either the Discovery Service, QR code scanning or MDM. By default, the QR code scanning screen will be displayed. The client code can customize the screen to display other activation screens.

    Create a FlowOptions instance and set the value for activationOption parameter, ActivationOption.DS_ONLY value to display the Discovery Service method only, ActivationOption.MDM_ONLY value to display the MDM method only and ActivationOption.DS_OR_QR value to display the activation screen for selecting from both methods. Using the code snippet below, the activation screen will only display the option for Discovery Service.

Kotlin
val flowContext = FlowContext(
    appConfig = appConfig,
    flowOptions = FlowOptions(
        activationOption = ActivationOption.DS_ONLY
)
FlowUtil.startFlow(activity, flowContext)

Notice that if the AppConfig instance contains complete information, the onboarding flow will skip the activation screen and go directly to the authentication step.

  1. After getting the complete application configuration, the onboarding flow will display different authentication screens based on the authentication type defined for the application. For example, a screen with user input for User Name and Password properties will be displayed if the authentication type is Basic. If the authentication type is SAML, the screen will redirect to a web page for user login. The logic to decide which authentication screen to display is built into the onboarding flow and the client code cannot change it.

  2. The set passcode and verify passcode screen will be skipped if a passcode policy is not enabled on the server side. Notice that in multi-user mode, the passcode step cannot be skipped and a default passcode policy will be created if it’s not enabled on the server.

    Also, the usage consent screen will be skipped if usage reporting is not enabled and the crash report screen will be skipped if crash reporting is not enabled. Otherwise, the screens will be displayed in the onboarding flow, and the client code cannot alter this fact. To enable the usage reporting and crash reporting services, the client code needs start them using the SDKInitializer class.

Kotlin
val services = mutableListOf<MobileService>()
services.add(UsageService())
services.add(CrashService())

SDKInitializer.start(this, * services.toTypedArray())
  1. Besides the options to include or exclude a step, you can set the client code to customize screens using its ScreenSettings, including the title, description, and button text for all screens. For some specific screens, such as the EULA screen, the client code can specify its own URL for the EULA file. See Onboarding Compose Screens in the help documentation for information on the detailed settings for each screen in the onboarding process.

    To have the customized screen settings take effect in the onboarding flow, set the list of ScreenSettings for the FlowContext instance.

Kotlin
val customScreenSettings = CustomScreenSettings(
    eulaSettings = EulaScreenSettings(
        eulaUrl = "file:///android_asset/my_eula.html"),
    setPasscodeScreenSettings = SetPasscodeScreenSettings(
        description = R.string.set_passcode_screen_desc)
)
val flowContext = FlowContext(
    appConfig = appConfig,
    flowOptions = FlowOptions(
        screenSettings =  customScreenSettings
)
FlowUtil.startFlow(activity, flowContext)
Step 2 Listen to the flow states
+
Step 3 Insert your own logic using action handler
+

Resources

Discussion

Share feedback on this tutorial or join the conversation in SAP Community.

Submit detailed feedback Discuss in Community
Steps
Step 1 of 3
1. Customize the UI screens for the Jetpack Compose onboarding flow 2. Listen to the flow states 3. Insert your own logic using action handler