# WearableButtons

Artifact: [androidx.wear:wear-input](https://developer.android.com/jetpack/androidx/releases/wear) [View Source](https://cs.android.com/search?q=file:androidx/wear/input/WearableButtons.java+class:androidx.wear.input.WearableButtons) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/wear#1.0.0)

*** ** * ** ***


```
public final class WearableButtons
```

<br />

*** ** * ** ***

Class containing helpers for managing wearable buttons.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/wear/input/WearableButtons.ButtonInfo` Metadata for a specific button. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_BOTTOM_CENTER() = 107` Represents the center third of the bottom side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_BOTTOM_LEFT() = 106` Represents the left third of the bottom side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_BOTTOM_RIGHT() = 108` Represents the right third of the bottom side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_EAST() = 0` Represents the east position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_ENE() = 1` Represents the east-northeast position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_ESE() = 15` Represents the east-southeast position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_LEFT_BOTTOM() = 105` Represents the bottom third of the left side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_LEFT_CENTER() = 104` Represents the center third of the left side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_LEFT_TOP() = 103` Represents the top third of the left side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_NE() = 2` Represents the northeast position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_NNE() = 3` Represents the north-northeast position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_NNW() = 5` Represents the north-northwest position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_NORTH() = 4` Represents the north position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_NW() = 6` Represents the northwest position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_RIGHT_BOTTOM() = 109` Represents the bottom third of the right side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_RIGHT_CENTER() = 110` Represents the center third of the right side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_RIGHT_TOP() = 111` Represents the top third of the right side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_SE() = 14` Represents the southeast position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_SOUTH() = 12` Represents the south position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_SSE() = 13` Represents the south-southeast position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_SSW() = 11` Represents the south-southwest position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_SW() = 10` Represents the southwest position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_TOP_CENTER() = 101` Represents the center third of the top side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_TOP_LEFT() = 102` Represents the left third of the top side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_TOP_RIGHT() = 100` Represents the right third of the top side on a square device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_UNKNOWN() = -1` Represents that the location zone is unknown. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_WEST() = 8` Represents the west position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_WNW() = 7` Represents the west-northwest position on a round device. |
| `static final int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_WSW() = 9` Represents the west-southwest position on a round device. |

| ### Public methods |
|---|---|
| `static int` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#getButtonCount(android.content.Context)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context)` Get the number of hardware buttons available. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/graphics/drawable/Drawable.html` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#getButtonIcon(android.content.Context,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context, int keycode)` Returns an icon that can be used to represent the location of a button. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/wear/input/WearableButtons.ButtonInfo` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#getButtonInfo(android.content.Context,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context, int keycode)` Returns a `https://developer.android.com/reference/androidx/wear/input/WearableButtons.ButtonInfo` containing the metadata for a specific button. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/CharSequence.html` | `https://developer.android.com/reference/androidx/wear/input/WearableButtons#getButtonLabel(android.content.Context,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context, int keycode)` Returns a CharSequence that describes the placement location of a button. |
| `static void` | `@https://developer.android.com/reference/androidx/annotation/VisibleForTesting https://developer.android.com/reference/androidx/wear/input/WearableButtons#setWearableButtonsProvider(androidx.wear.input.WearableButtonsProvider)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/wear/input/WearableButtonsProvider provider)` Testing call to allow the underlying `https://developer.android.com/reference/androidx/wear/input/WearableButtonsProvider` to be substituted in test code. |

## Constants

### LOCATION_BOTTOM_CENTER

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_BOTTOM_CENTER = 107
```

Represents the center third of the bottom side on a square device.

### LOCATION_BOTTOM_LEFT

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_BOTTOM_LEFT = 106
```

Represents the left third of the bottom side on a square device.

### LOCATION_BOTTOM_RIGHT

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_BOTTOM_RIGHT = 108
```

Represents the right third of the bottom side on a square device.

### LOCATION_EAST

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_EAST = 0
```

Represents the east position on a round device.

### LOCATION_ENE

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_ENE = 1
```

Represents the east-northeast position on a round device.

### LOCATION_ESE

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_ESE = 15
```

Represents the east-southeast position on a round device.

### LOCATION_LEFT_BOTTOM

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_LEFT_BOTTOM = 105
```

Represents the bottom third of the left side on a square device.

### LOCATION_LEFT_CENTER

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_LEFT_CENTER = 104
```

Represents the center third of the left side on a square device.

### LOCATION_LEFT_TOP

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_LEFT_TOP = 103
```

Represents the top third of the left side on a square device.

### LOCATION_NE

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_NE = 2
```

Represents the northeast position on a round device.

### LOCATION_NNE

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_NNE = 3
```

Represents the north-northeast position on a round device.

### LOCATION_NNW

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_NNW = 5
```

Represents the north-northwest position on a round device.

### LOCATION_NORTH

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_NORTH = 4
```

Represents the north position on a round device.

### LOCATION_NW

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_NW = 6
```

Represents the northwest position on a round device.

### LOCATION_RIGHT_BOTTOM

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_RIGHT_BOTTOM = 109
```

Represents the bottom third of the right side on a square device.

### LOCATION_RIGHT_CENTER

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_RIGHT_CENTER = 110
```

Represents the center third of the right side on a square device.

### LOCATION_RIGHT_TOP

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_RIGHT_TOP = 111
```

Represents the top third of the right side on a square device.

### LOCATION_SE

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_SE = 14
```

Represents the southeast position on a round device.

### LOCATION_SOUTH

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_SOUTH = 12
```

Represents the south position on a round device.

### LOCATION_SSE

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_SSE = 13
```

Represents the south-southeast position on a round device.

### LOCATION_SSW

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_SSW = 11
```

Represents the south-southwest position on a round device.

### LOCATION_SW

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_SW = 10
```

Represents the southwest position on a round device.

### LOCATION_TOP_CENTER

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_TOP_CENTER = 101
```

Represents the center third of the top side on a square device.

### LOCATION_TOP_LEFT

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_TOP_LEFT = 102
```

Represents the left third of the top side on a square device.

### LOCATION_TOP_RIGHT

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_TOP_RIGHT = 100
```

Represents the right third of the top side on a square device.

### LOCATION_UNKNOWN

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_UNKNOWN = -1
```

Represents that the location zone is unknown.

### LOCATION_WEST

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_WEST = 8
```

Represents the west position on a round device.

### LOCATION_WNW

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_WNW = 7
```

Represents the west-northwest position on a round device.

### LOCATION_WSW

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
public static final int LOCATION_WSW = 9
```

Represents the west-southwest position on a round device.

## Public methods

### getButtonCount

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/wear#1.0.0)

```
public static int getButtonCount(@NonNull Context context)
```

Get the number of hardware buttons available. This count includes the primary stem key as well as any secondary stem keys available.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context` | The context of the current activity |

| Returns |
|---|---|
| `int` | The number of buttons available, or the information is not available. |

### getButtonIcon

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/wear#1.0.0)

```
public static @Nullable Drawable getButtonIcon(@NonNull Context context, int keycode)
```

Returns an icon that can be used to represent the location of a button.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context` | The context of the current activity |
| `int keycode` | The keycode associated with the hardware button of interest |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/graphics/drawable/Drawable.html` | A drawable representing the location of a button, or null if unavailable |

### getButtonInfo

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/wear#1.0.0)

```
public static @Nullable WearableButtons.ButtonInfo getButtonInfo(@NonNull Context context, int keycode)
```

Returns a `https://developer.android.com/reference/androidx/wear/input/WearableButtons.ButtonInfo` containing the metadata for a specific button.

The location will be populated in the following manner:

- The provided point will be on the screen, or more typically, on the edge of the screen.
- The point won't be off the edge of the screen.
- The location returned is a screen coordinate. The unit of measurement is in pixels. The coordinates do not take rotation into account and assume that the device is in the standard upright position.

Additionally, a location zone will be provided for the button, which will be one of the `LOCATION_*` constants. This defines the general area of the button on the device, and can be passed to `https://developer.android.com/reference/androidx/wear/input/WearableButtons#getButtonLabel(android.content.Context,int)` to provide a human-understandable name for the location. There are two sets of locations for a device, depending on whether it is a circular or rectilinear device.

The "compass" locations (e.g. `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_ENE()`) are used on a circular device. The locations for each are shown in the following image: ![Image detailing the locations of compass locations on a Wear device. North is at the top, followed by north-north-east, north-east, east-north-east, east, and so on.](https://developer.android.com/images/reference/androidx/wear/wear-input/buttons_round.png)

The other locations (e.g. `https://developer.android.com/reference/androidx/wear/input/WearableButtons#LOCATION_BOTTOM_CENTER()`) are used on a rectilinear device. The locations for each are shown in the following image: ![Image detailing the locations of other buttons on a Wear device. The first word details the side of the device the button is on, then the second word details where on that side the button is (e.g. 'TOP LEFT' means on the top edge, at the left hand side, and 'RIGHT BOTTOM' means on the right edge, at the bottom).](https://developer.android.com/images/reference/androidx/wear/wear-input/buttons_square.png)

Common keycodes to use are `https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_STEM_PRIMARY`, `https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_STEM_1`, `https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_STEM_2`, and `https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_STEM_3`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context` | The context of the current activity |
| `int keycode` | The keycode associated with the hardware button of interest |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/wear/input/WearableButtons.ButtonInfo` | A `https://developer.android.com/reference/androidx/wear/input/WearableButtons.ButtonInfo` containing the metadata for the given keycode or null if the information is not available |

### getButtonLabel

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/wear#1.0.0)

```
public static @Nullable CharSequence getButtonLabel(@NonNull Context context, int keycode)
```

Returns a CharSequence that describes the placement location of a button. An example might be "Top right" or "Bottom".

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context` | The context of the current activity |
| `int keycode` | The keycode associated with the hardware button of interest |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/CharSequence.html` | A CharSequence describing the placement location of the button, or null if no location is available for that button. |

### setWearableButtonsProvider

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/wear#1.2.0)

```
@VisibleForTesting
public static void setWearableButtonsProvider(@NonNull WearableButtonsProvider provider)
```

Testing call to allow the underlying `https://developer.android.com/reference/androidx/wear/input/WearableButtonsProvider` to be substituted in test code.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/wear/input/WearableButtonsProvider provider` | The new `https://developer.android.com/reference/androidx/wear/input/WearableButtonsProvider` to use. |