Address common issues on Wear

Creating a custom watch face for Wear OS by Google is substantially different from
creating notifications and wearable-specific activities. This class shows you how to
resolve some issues that you may encounter as you implement your first few watch faces.

Detect the shape of the screen

Some Wear OS devices have square screens, while others have round screens. Devices with
round screens can contain an inset (or "chin") at the bottom of the screen. Your watch face
should adapt to and take advantage of the particular shape of the screen, as described in the
design guidelines.

To adapt your design when you draw your watch face, check the value of the
mIsRound and mChinSize member variables.

Accommodate peek cards

Note: Peek cards only appear in Wear 1.x apps.

When users receive a notification, the notification card may cover a significant portion of the
screen, depending on the
system UI style. Your
watch face should adapt to these situations by ensuring that users can still tell the time while
the notification card is present.

Analog watch faces can make adjustments when a notification card is present, like scaling
down the watch face to fit inside the portion of the screen not covered by the peek card. Digital
watch faces that display the time in the area of the screen not covered by peek cards do not
usually require adjustments. To determine the free space above the peek card so you can adapt
your watch face, use the
WatchFaceService.Engine.getPeekCardPosition()
method.

In ambient mode, peek cards have a transparent background. If your watch face contains details
near the card in ambient mode, consider drawing a black rectangle over them to ensure that users
can read the contents of the card.

Configure the system indicators

To ensure that the system indicators remain visible, you can configure their position on the
screen and whether they need background protection when you create a
WatchFaceStyle
instance:

To protect the status bar and hotword with a semi-transparent gray background, use the
setViewProtection()
method. This is usually necessary if your watch face has a light background, since the system
indicators are white.

Use relative measurements

Wear OS devices from different manufacturers feature screens with a variety of sizes and
resolutions. Your watch face should adapt to these variations by using relative measurements
instead of absolute pixel values.

When you draw your watch face, obtain the size of the canvas with the Canvas.getWidth() and Canvas.getHeight() methods and set the positions of your
graphic elements using values that are some fraction of the detected screen size. If you resize
the elements of your watch face in response to a peek card, use values that are some fraction
of the remaining space above the card to redraw your watch face.