Home / News / Todoist’s journey to modernize Wear OS experience with Material 3 Expressive and Credential Manager

Todoist’s journey to modernize Wear OS experience with Material 3 Expressive and Credential Manager

Posted by Kseniia Shumelchyk – Engineering Manager, Android Developer Relations, and Rastislav Vaško – Head of Android at Doist

Since we expanded Android to smartwatches, Todoist has continually evolved their Wear OS experience. In the latest version of the platform, Wear OS 6, they leveraged Compose for Wear OS to bring Material 3 Expressive best practices to life, refreshing their app’s and tile’s appearance in the process.

Todoist and the Wear OS opportunity

Todoist is a popular task management application designed to help users organize, prioritize, and complete their tasks across their personal and professional lives the moment they come to mind. Its core philosophy embraces a clean, simple interface that provides a robust set of features, making it accessible for casual users while still being effective for power users and teams.

Here, Wear OS comes into frame – a smartwatch isn’t just a smaller phone, it’s an immediate, personal companion. The ability to glance at your wrist for timely information or quickly capture a task is a uniquely powerful experience. With the revitalization of Wear OS, driven by a modern toolkit and a unified platform, the opportunity to create these delightful experiences has never been greater.

Todoist on their Wear OS evolution

The Todoist team has always been committed to being wherever their users are, helping them organize their work and lives with minimal friction.

We’ve had a Wear OS app ever since Android Wear 1.0 came out in 2014! Since that time, our experience on Wear OS has evolved to become a perfect platform for quick interactions and easy data access,” said Rastislav Vaško, head of Android at Doist.

When Wear OS began its new chapter a few years ago, Todoist saw the chance to do more than just maintain their existing app, and instead completely reimagine what a task manager on your wrist could be. This marked an important milestone when they migrated the whole codebase to Jetpack Compose along with a UX refresh, and saw a solid user base growth rate increase by 50%.

Over the recent months, since Wear OS 6 Developer Preview came out, Todoist developers have been working on both visual and under-the-hood improvements of the Wear OS experience, specifically:

This time we didn’t add new experiences, but we wanted the existing ones to get better – through new UI patterns, dynamic theming, and simpler authentication,” Rastislav said.

moving image of Todoist Wear OS app after Material 3 EXpressive migration

Todoist Wear OS app after Material 3 Expressive migration

Implementing Material 3 Expressive redesign

On wearables, a highly-glanceable form factor, developers need to make every tap count, and Todoist’s design philosophy is built on this principle. As the team put it, “On Wear OS, we’re focusing only on the very essential actions. Each screen and each tap should be meaningful and provide value to the user”.

This focus on simplicity allowed Todoist to fully embrace the new design language and APIs that make modern Wear OS development so compelling, so they knew from the start that they wanted to adopt Material 3 Expressive:

Material 3 Expressive brings a lot of fluid interactions and delight to Wear OS, and we wanted to leverage these new patterns,” notes Rastislav. “It’s more than just a fresh coat of paint; it’s a design system built for the modern wearable experience”.

As a first step, Todoist design team has used Wear Material 3 Expressive Figma design kits and guiding principles to craft an updated UX for Todoist app and tiles that allowed them to understand the new design language and use relevant Material 3 elements.

Implementing the new design language was made significantly easier by the modern developer toolkit, as the Wear Compose Material 3 and Wear Protolayout Material 3 libraries provide updated and extended color schemes, typography, and shapes, as well as a full set of UI components, and layouts that come with built-in support for expressive motion.

Perhaps best of all, Todoist was able to implement an elegant solution that didn’t require lots of complicated code, as Jetpack Compose matched nicely to design elements in Figma kit. According to the team, “That was the best part – we didn’t need to solve any hard challenges… The APIs work, and they’re simple and intuitive!”.

moving image of Todoist Wear OS app showing edge hugging button after Material 3 EXpressive migration

The “edge hugging” button provides a sleek and fun experience for users

Todoist developers have taken advantage of the new components introduced in the Material 3 library. In particular, a combination of ScreenScaffold, which lays out the structure of a screen and coordinates transitions of the scroll indicator and time text label; EdgeButton, which has a special shape designed for the bottom of the screen; and TransformingLazyColumn for vertically scrolling lists—altogether creates a coherent user experience.

@Composable
private fun CreateItemLayout(
    state: CreateItemViewModel.Parsed,
    // ...
    scrollState: TransformingLazyColumnState = rememberTransformingLazyColumnState(),
) = ScreenScaffold(
    modifier = Modifier.background(MaterialTheme.colorScheme.background),
    scrollState = scrollState,
    contentPadding = rememberResponsiveColumnPadding(
        first = ColumnItemType.Button,
        last = ColumnItemType.EdgeButtonPadding,
    ),
    edgeButton = {
        EdgeButton(
            text = stringResource(id = R.string.action_home_create_item),
            colors = TodoistButtonDefaults.primaryButtonColors(),
            onClick = onSubmitClick,
            enabled = state.isReadyToSubmit,
        )
    },
) { contentPadding ->
    val transformationSpec = rememberTransformationSpec()
    TransformingLazyColumn(
        modifier = modifier.fillMaxSize(),
        contentPadding = contentPadding,
        verticalArrangement = Arrangement.spacedBy(
            space = 4.dp,
            alignment = Alignment.Top,
        ),
        horizontalAlignment = Alignment.Start,
        state = scrollState,
    ) {
       // ...
    }
}

Implementation example for ‘Add new task’ screen

This seamless integration between design and development extended to tiles, where the library provides a composable-like, declarative approach to building tiles, which made integration feel like a natural extension of the main app: “Technically, the new Tiles API resembles Compose, which we’re big fans of, so it felt very natural to use it right away”.

example of the glanceable ‘Day Progress’ tile

The ‘Day Progress’ Tile provides a delightful and glanceable experience

As an example, for the ‘Day Progress’ Tile, Todoist used one of the standard layouts that use a Slots-based approach:

class DayProgressTileRenderer(
    context: Context,
    private val onClickAction: Action,
) : SingleTileLayoutRenderer<DayProgressTileState, Unit>(context) {
    override fun renderTile(
        state: DayProgressTileState,
        deviceParameters: DeviceParametersBuilders.DeviceParameters,
    ) = materialScope(
        context = context,
        deviceConfiguration = deviceParameters,
        defaultColorScheme = state.theme.toTileColorScheme(context),
    ) {
        primaryLayout(
            titleSlot = { titleSlot(context) },
            mainSlot = { mainSlot(context, state, onClickAction) },
            labelForBottomSlot = { labelForBottomSlot(context) },
            bottomSlot = { bottomSlot(context, state) },
            margins = PrimaryLayoutMargins.MIN_PRIMARY_LAYOUT_MARGIN,
        )
    }

// ...

private fun MaterialScope.mainSlot(...) = graphicDataCard(...)

private fun MaterialScope.labelForBottomSlot(context: Context) = text(
    text = context.getString(R.string.tile_day_progress_goal).layoutString,
    typography = Typography.TITLE_SMALL,
)

The slots extend MaterialScope automatically, which means no extra work is needed for styling.

The protolayout-material3 library provides a large number of components designed according to the Material 3 Expressive specifications and user interface recommendations, which the Todoist team has taken advantage of. An example is the graphicDataCard, which Todoist used for the main slot on this tile.

Todoist’s Tile also supports dynamic color theming, which, implementation-wise, requires no effort from developers as the top-level materialScope function has the allowDynamicTheme flag set to true by default.

examples of the 'Day Progress' tile supporting dynamic color

The ‘Day Progress’ Tile supports dynamic color theming on Wear OS 6

Streamlining authentication with Credential Manager

To put the cherry on top of the update, Todoist also implemented a new user authentication experience with the new Credential Manager API on Wear OS.

Credential Manager provides a simplified, standardized user sign-in experience that can be implemented with minimal effort by reusing the same code as the mobile version.

Todoist especially appreciated the standardized UI: “…the [Credential Manager] UI is managed by the [Wear OS] library, which makes the work easy, freeing us up to concentrate on our app’s unique features, rather than reinventing the wheel…”.

moving examples of Todoist app authentication before migrating to Credential Manager on the left, and after on the right

Todoist authentication: before (left) and after (right) migrating to Credential Manager

Previously, Todoist had implemented its own UI that incorporated supported authentication methods, such as reusing an auth token from an existing mobile sign-in, legacy Google Sign-In, and OAuth 2.0, which allowed users to complete their sign-in on a connected phone.

After the migration, the Todoist authentication flow relies on the Credential Manager UI, which provides a single entry point for available sign-in methods and accounts, including passwords, passkeys, and federated identities like “Sign in with Google.” Users can now enjoy a streamlined experience with a single-tap sign-in on their watch.

For apps migrating to Credential Manager, we recommend keeping at least one backup authentication method in case a user taps “Dismiss.” The Todoist team reused their previous options: OAuth 2.0 and data layer token sharing.

And since they already had a mobile integration, Todoist was able to reuse their mobile code: “We were already using Credential Manager in Todoist for Android, so… it was a no-brainer to adopt it. We’re providing the same seamless experience in both apps while simplifying and reusing code.

Impact of the transformation

With their revamped experience completed, Todoist was thrilled with the results: “the Edge Hugging Button just feels delightful to use! But seriously, authentication is simpler and faster with Credential Manager”. Rastislav reports excellent user feedback, and the team is now preparing to make the updates available to all users in the coming weeks.

By leveraging the fluid interactions and delightful design of Material 3 Expressive, we've elevated the Todoist expreience on Wear OS. Our Wear OS users are not only more engaged, but also show a significantly higher conversion rate than average – a trend we expect to continue – Rastislav Vasko, Head of Android at Doist

With their robust user base on Wear OS, Todoist expects to continue growing as they invest further and see a strong business case to continue their commitment to wearables.

Rastislav also sums it up well with the final future-looking quote: “We’re invested in Wear! Currently we’re exploring new Tiles, but also AI features.

Todoist’s recommendations to Android and Wear OS developers

As an active member in the ever-growing Wear OS app ecosystem, Todoist was eager to provide some simple advice for other developers interested in Material 3 Expressive: “Just follow the docs and examples. The samples available for Wear OS are superb and always up-to-date”.

They also recommend embracing Wear OS as a whole: “It’s a mature yet fun platform to develop for! Your designers will need to focus on the essence of your product, your developers have a great testing ground to explore new patterns and APIs, and your users will appreciate having faster and easier access to your product.

Get started with Material 3 Expressive and Credential Manager

With its new features and modern elegance, Wear OS 6 with Material 3 Expressive provides a smartwatch platform that is delightful for users, and convenient for developers.

Learn more about the Material 3 Expressive for Wear OS design system, and get access to the Material 3 Expressive components and layouts using latest Wear Compose Material 3 and Wear Protolayout Material 3 Jetpack libraries.

For even more resources for developers visit:

To learn more about Credential Manager on Wear OS check out developer guidance and sample app.

Tagged:

Leave a Reply

Your email address will not be published. Required fields are marked *