Skip to content

Proposal: Converged and improved badge APIs #138

@SetTrend

Description

@SetTrend
Summary Status

Customer / job-to-be-done: App developers need to keep their users informed about number of new items/etc via badges on the taskbar regardless of whether their app is currently open

Problem: Win32 apps have a different API for using badges on taskbar, with completely different functionality than UWP apps. Win32 apps can't simply set a number (they have to use custom icons), and UWP apps can only use preset badge/number options (they can't use custom icons).

How does our solution make things easier? All types of apps will benefit from a single, easy-to-use badge API, that supports straightforward numbers and common symbols in addition to custom icons.

❌ Problem validation
❌ Docs
❌ Dev spec
❌ Solution validation
❌ Implementation
❌ Samples

Target customer

Packaging App types
✅ Packaged apps
✅ Unpackaged apps
✅ WPF
✅ Win32 (C++)
✅ WinForms
✅ Console
✅ UWP
⚠ Cross-plat (Electron, MAUI, React Native, etc)
⚠ PowerShell

While this work should be consumable by cross-platform platforms to improve experiences there, we should have a separate feature specifically for ensuring badges are built in "natively" and developers don't have to do additional custom work to access the Windows native layer.

Customer's job-to-be-done

Developer needs to keep their users informed via badges regardless of whether their app is currently open. They may need advanced functionality like custom icons, or might just need simple functionality like setting a number.

Problems that exist today

Problem Validated?
TODO: Fill this out ❌ TODO

Summary

Converge badge APIs across Win32 and UWP, and also provide objects for the APIs rather than XML (bring in the Toolkit helpers into Reunion itself).

public class BadgeUpdater
{
  public void Update(byte newValue) {...}
  public void Update(BadgeGlyph newValue) {...}

  //...

  public enum BadgeGlyph
  {
    None,
    Activity,
    Alarm,
    //...
  }

  //...
}

Rationale

Manipulating XML text doesn't seem either compile-time safe nor adequate when programming in a programming language.

XML isn't a programming language, it's a serialization medium, like YAML, JSON or plain text.

Editing plain text in terms of XML doesn't provide compile-time safety nor does it support IntelliSense.

Hence, for API purity I suggest do add these two type-safe overloads to the API, basically implementing the two functions documented in the documentation.

Additional ask for this here: microsoft/microsoft-ui-xaml#1919

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions