Key.android.kt
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.compose.ui.input.key
import android.view.KeyEvent
import android.view.KeyEvent.KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN
import android.view.KeyEvent.KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.input.key.Key.Companion.Number
import androidx.compose.ui.util.packInts
import androidx.compose.ui.util.unpackInt1
/**
* Actual implementation of [Key] for Android.
*
* @param keyCode an integer code representing the key pressed.
*
* @sample androidx.compose.ui.samples.KeyEventIsAltPressedSample
*/
@JvmInline
actual value class Key(val keyCode: Long) {
actual companion object {
/** Unknown key. */
@ExperimentalComposeUiApi
actual val Unknown = Key(KeyEvent.KEYCODE_UNKNOWN)
/**
* Soft Left key.
*
* Usually situated below the display on phones and used as a multi-function
* feature key for selecting a software defined function shown on the bottom left
* of the display.
*/
@ExperimentalComposeUiApi
actual val SoftLeft = Key(KeyEvent.KEYCODE_SOFT_LEFT)
/**
* Soft Right key.
*
* Usually situated below the display on phones and used as a multi-function
* feature key for selecting a software defined function shown on the bottom right
* of the display.
*/
@ExperimentalComposeUiApi
actual val SoftRight = Key(KeyEvent.KEYCODE_SOFT_RIGHT)
/**
* Home key.
*
* This key is handled by the framework and is never delivered to applications.
*/
@ExperimentalComposeUiApi
actual val Home = Key(KeyEvent.KEYCODE_HOME)
/** Back key. */
@ExperimentalComposeUiApi
actual val Back = Key(KeyEvent.KEYCODE_BACK)
/** Help key. */
@ExperimentalComposeUiApi
actual val Help = Key(KeyEvent.KEYCODE_HELP)
/**
* Navigate to previous key.
*
* Goes backward by one item in an ordered collection of items.
*/
@ExperimentalComposeUiApi
actual val NavigatePrevious = Key(KeyEvent.KEYCODE_NAVIGATE_PREVIOUS)
/**
* Navigate to next key.
*
* Advances to the next item in an ordered collection of items.
*/
@ExperimentalComposeUiApi
actual val NavigateNext = Key(KeyEvent.KEYCODE_NAVIGATE_NEXT)
/**
* Navigate in key.
*
* Activates the item that currently has focus or expands to the next level of a navigation
* hierarchy.
*/
@ExperimentalComposeUiApi
actual val NavigateIn = Key(KeyEvent.KEYCODE_NAVIGATE_IN)
/**
* Navigate out key.
*
* Backs out one level of a navigation hierarchy or collapses the item that currently has
* focus.
*/
@ExperimentalComposeUiApi
actual val NavigateOut = Key(KeyEvent.KEYCODE_NAVIGATE_OUT)
/** Consumed by the system for navigation up. */
@ExperimentalComposeUiApi
actual val SystemNavigationUp = Key(KeyEvent.KEYCODE_SYSTEM_NAVIGATION_UP)
/** Consumed by the system for navigation down. */
@ExperimentalComposeUiApi
actual val SystemNavigationDown = Key(KeyEvent.KEYCODE_SYSTEM_NAVIGATION_DOWN)
/** Consumed by the system for navigation left. */
@ExperimentalComposeUiApi
actual val SystemNavigationLeft = Key(KeyEvent.KEYCODE_SYSTEM_NAVIGATION_LEFT)
/** Consumed by the system for navigation right. */
@ExperimentalComposeUiApi
actual val SystemNavigationRight = Key(KeyEvent.KEYCODE_SYSTEM_NAVIGATION_RIGHT)
/** Call key. */
@ExperimentalComposeUiApi
actual val Call = Key(KeyEvent.KEYCODE_CALL)
/** End Call key. */
@ExperimentalComposeUiApi
actual val EndCall = Key(KeyEvent.KEYCODE_ENDCALL)
/**
* Up Arrow Key / Directional Pad Up key.
*
* May also be synthesized from trackball motions.
*/
@ExperimentalComposeUiApi
actual val DirectionUp = Key(KeyEvent.KEYCODE_DPAD_UP)
/**
* Down Arrow Key / Directional Pad Down key.
*
* May also be synthesized from trackball motions.
*/
@ExperimentalComposeUiApi
actual val DirectionDown = Key(KeyEvent.KEYCODE_DPAD_DOWN)
/**
* Left Arrow Key / Directional Pad Left key.
*
* May also be synthesized from trackball motions.
*/
@ExperimentalComposeUiApi
actual val DirectionLeft = Key(KeyEvent.KEYCODE_DPAD_LEFT)
/**
* Right Arrow Key / Directional Pad Right key.
*
* May also be synthesized from trackball motions.
*/
@ExperimentalComposeUiApi
actual val DirectionRight = Key(KeyEvent.KEYCODE_DPAD_RIGHT)
/**
* Center Arrow Key / Directional Pad Center key.
*
* May also be synthesized from trackball motions.
*/
@ExperimentalComposeUiApi
actual val DirectionCenter = Key(KeyEvent.KEYCODE_DPAD_CENTER)
/** Directional Pad Up-Left. */
@ExperimentalComposeUiApi
actual val DirectionUpLeft = Key(KeyEvent.KEYCODE_DPAD_UP_LEFT)
/** Directional Pad Down-Left. */
@ExperimentalComposeUiApi
actual val DirectionDownLeft = Key(KeyEvent.KEYCODE_DPAD_DOWN_LEFT)
/** Directional Pad Up-Right. */
@ExperimentalComposeUiApi
actual val DirectionUpRight = Key(KeyEvent.KEYCODE_DPAD_UP_RIGHT)
/** Directional Pad Down-Right. */
@ExperimentalComposeUiApi
actual val DirectionDownRight = Key(KeyEvent.KEYCODE_DPAD_DOWN_RIGHT)
/**
* Volume Up key.
*
* Adjusts the speaker volume up.
*/
@ExperimentalComposeUiApi
actual val VolumeUp = Key(KeyEvent.KEYCODE_VOLUME_UP)
/**
* Volume Down key.
*
* Adjusts the speaker volume down.
*/
@ExperimentalComposeUiApi
actual val VolumeDown = Key(KeyEvent.KEYCODE_VOLUME_DOWN)
/** Power key. */
@ExperimentalComposeUiApi
actual val Power = Key(KeyEvent.KEYCODE_POWER)
/**
* Camera key.
*
* Used to launch a camera application or take pictures.
*/
@ExperimentalComposeUiApi
actual val Camera = Key(KeyEvent.KEYCODE_CAMERA)
/** Clear key. */
@ExperimentalComposeUiApi
actual val Clear = Key(KeyEvent.KEYCODE_CLEAR)
/** '0' key. */
@ExperimentalComposeUiApi
actual val Zero = Key(KeyEvent.KEYCODE_0)
/** '1' key. */
@ExperimentalComposeUiApi
actual val One = Key(KeyEvent.KEYCODE_1)
/** '2' key. */
@ExperimentalComposeUiApi
actual val Two = Key(KeyEvent.KEYCODE_2)
/** '3' key. */
@ExperimentalComposeUiApi
actual val Three = Key(KeyEvent.KEYCODE_3)
/** '4' key. */
@ExperimentalComposeUiApi
actual val Four = Key(KeyEvent.KEYCODE_4)
/** '5' key. */
@ExperimentalComposeUiApi
actual val Five = Key(KeyEvent.KEYCODE_5)
/** '6' key. */
@ExperimentalComposeUiApi
actual val Six = Key(KeyEvent.KEYCODE_6)
/** '7' key. */
@ExperimentalComposeUiApi
actual val Seven = Key(KeyEvent.KEYCODE_7)
/** '8' key. */
@ExperimentalComposeUiApi
actual val Eight = Key(KeyEvent.KEYCODE_8)
/** '9' key. */
@ExperimentalComposeUiApi
actual val Nine = Key(KeyEvent.KEYCODE_9)
/** '+' key. */
@ExperimentalComposeUiApi
actual val Plus = Key(KeyEvent.KEYCODE_PLUS)
/** '-' key. */
@ExperimentalComposeUiApi
actual val Minus = Key(KeyEvent.KEYCODE_MINUS)
/** '*' key. */
@ExperimentalComposeUiApi
actual val Multiply = Key(KeyEvent.KEYCODE_STAR)
/** '=' key. */
@ExperimentalComposeUiApi
actual val Equals = Key(KeyEvent.KEYCODE_EQUALS)
/** '#' key. */
@ExperimentalComposeUiApi
actual val Pound = Key(KeyEvent.KEYCODE_POUND)
/** 'A' key. */
@ExperimentalComposeUiApi
actual val A = Key(KeyEvent.KEYCODE_A)
/** 'B' key. */
@ExperimentalComposeUiApi
actual val B = Key(KeyEvent.KEYCODE_B)
/** 'C' key. */
@ExperimentalComposeUiApi
actual val C = Key(KeyEvent.KEYCODE_C)
/** 'D' key. */
@ExperimentalComposeUiApi
actual val D = Key(KeyEvent.KEYCODE_D)
/** 'E' key. */
@ExperimentalComposeUiApi
actual val E = Key(KeyEvent.KEYCODE_E)
/** 'F' key. */
@ExperimentalComposeUiApi
actual val F = Key(KeyEvent.KEYCODE_F)
/** 'G' key. */
@ExperimentalComposeUiApi
actual val G = Key(KeyEvent.KEYCODE_G)
/** 'H' key. */
@ExperimentalComposeUiApi
actual val H = Key(KeyEvent.KEYCODE_H)
/** 'I' key. */
@ExperimentalComposeUiApi
actual val I = Key(KeyEvent.KEYCODE_I)
/** 'J' key. */
@ExperimentalComposeUiApi
actual val J = Key(KeyEvent.KEYCODE_J)
/** 'K' key. */
@ExperimentalComposeUiApi
actual val K = Key(KeyEvent.KEYCODE_K)
/** 'L' key. */
@ExperimentalComposeUiApi
actual val L = Key(KeyEvent.KEYCODE_L)
/** 'M' key. */
@ExperimentalComposeUiApi
actual val M = Key(KeyEvent.KEYCODE_M)
/** 'N' key. */
@ExperimentalComposeUiApi
actual val N = Key(KeyEvent.KEYCODE_N)
/** 'O' key. */
@ExperimentalComposeUiApi
actual val O = Key(KeyEvent.KEYCODE_O)
/** 'P' key. */
@ExperimentalComposeUiApi
actual val P = Key(KeyEvent.KEYCODE_P)
/** 'Q' key. */
@ExperimentalComposeUiApi
actual val Q = Key(KeyEvent.KEYCODE_Q)
/** 'R' key. */
@ExperimentalComposeUiApi
actual val R = Key(KeyEvent.KEYCODE_R)
/** 'S' key. */
@ExperimentalComposeUiApi
actual val S = Key(KeyEvent.KEYCODE_S)
/** 'T' key. */
@ExperimentalComposeUiApi
actual val T = Key(KeyEvent.KEYCODE_T)
/** 'U' key. */
@ExperimentalComposeUiApi
actual val U = Key(KeyEvent.KEYCODE_U)
/** 'V' key. */
@ExperimentalComposeUiApi
actual val V = Key(KeyEvent.KEYCODE_V)
/** 'W' key. */
@ExperimentalComposeUiApi
actual val W = Key(KeyEvent.KEYCODE_W)
/** 'X' key. */
@ExperimentalComposeUiApi
actual val X = Key(KeyEvent.KEYCODE_X)
/** 'Y' key. */
@ExperimentalComposeUiApi
actual val Y = Key(KeyEvent.KEYCODE_Y)
/** 'Z' key. */
@ExperimentalComposeUiApi
actual val Z = Key(KeyEvent.KEYCODE_Z)
/** ',' key. */
@ExperimentalComposeUiApi
actual val Comma = Key(KeyEvent.KEYCODE_COMMA)
/** '.' key. */
@ExperimentalComposeUiApi
actual val Period = Key(KeyEvent.KEYCODE_PERIOD)
/** Left Alt modifier key. */
@ExperimentalComposeUiApi
actual val AltLeft = Key(KeyEvent.KEYCODE_ALT_LEFT)
/** Right Alt modifier key. */
@ExperimentalComposeUiApi
actual val AltRight = Key(KeyEvent.KEYCODE_ALT_RIGHT)
/** Left Shift modifier key. */
@ExperimentalComposeUiApi
actual val ShiftLeft = Key(KeyEvent.KEYCODE_SHIFT_LEFT)
/** Right Shift modifier key. */
@ExperimentalComposeUiApi
actual val ShiftRight = Key(KeyEvent.KEYCODE_SHIFT_RIGHT)
/** Tab key. */
@ExperimentalComposeUiApi
actual val Tab = Key(KeyEvent.KEYCODE_TAB)
/** Space key. */
@ExperimentalComposeUiApi
actual val Spacebar = Key(KeyEvent.KEYCODE_SPACE)
/**
* Symbol modifier key.
*
* Used to enter alternate symbols.
*/
@ExperimentalComposeUiApi
actual val Symbol = Key(KeyEvent.KEYCODE_SYM)
/**
* Browser special function key.
*
* Used to launch a browser application.
*/
@ExperimentalComposeUiApi
actual val Browser = Key(KeyEvent.KEYCODE_EXPLORER)
/**
* Envelope special function key.
*
* Used to launch a mail application.
*/
@ExperimentalComposeUiApi
actual val Envelope = Key(KeyEvent.KEYCODE_ENVELOPE)
/** Enter key. */
@ExperimentalComposeUiApi
actual val Enter = Key(KeyEvent.KEYCODE_ENTER)
/**
* Backspace key.
*
* Deletes characters before the insertion point, unlike [Delete].
*/
@ExperimentalComposeUiApi
actual val Backspace = Key(KeyEvent.KEYCODE_DEL)
/**
* Delete key.
*
* Deletes characters ahead of the insertion point, unlike [Backspace].
*/
@ExperimentalComposeUiApi
actual val Delete = Key(KeyEvent.KEYCODE_FORWARD_DEL)
/** Escape key. */
@ExperimentalComposeUiApi
actual val Escape = Key(KeyEvent.KEYCODE_ESCAPE)
/** Left Control modifier key. */
@ExperimentalComposeUiApi
actual val CtrlLeft = Key(KeyEvent.KEYCODE_CTRL_LEFT)
/** Right Control modifier key. */
@ExperimentalComposeUiApi
actual val CtrlRight = Key(KeyEvent.KEYCODE_CTRL_RIGHT)
/** Caps Lock key. */
@ExperimentalComposeUiApi
actual val CapsLock = Key(KeyEvent.KEYCODE_CAPS_LOCK)
/** Scroll Lock key. */
@ExperimentalComposeUiApi
actual val ScrollLock = Key(KeyEvent.KEYCODE_SCROLL_LOCK)
/** Left Meta modifier key. */
@ExperimentalComposeUiApi
actual val MetaLeft = Key(KeyEvent.KEYCODE_META_LEFT)
/** Right Meta modifier key. */
@ExperimentalComposeUiApi
actual val MetaRight = Key(KeyEvent.KEYCODE_META_RIGHT)
/** Function modifier key. */
@ExperimentalComposeUiApi
actual val Function = Key(KeyEvent.KEYCODE_FUNCTION)
/** System Request / Print Screen key. */
@ExperimentalComposeUiApi
actual val PrintScreen = Key(KeyEvent.KEYCODE_SYSRQ)
/** Break / Pause key. */
@ExperimentalComposeUiApi
actual val Break = Key(KeyEvent.KEYCODE_BREAK)
/**
* Home Movement key.
*
* Used for scrolling or moving the cursor around to the start of a line
* or to the top of a list.
*/
@ExperimentalComposeUiApi
actual val MoveHome = Key(KeyEvent.KEYCODE_MOVE_HOME)
/**
* End Movement key.
*
* Used for scrolling or moving the cursor around to the end of a line
* or to the bottom of a list.
*/
@ExperimentalComposeUiApi
actual val MoveEnd = Key(KeyEvent.KEYCODE_MOVE_END)
/**
* Insert key.
*
* Toggles insert / overwrite edit mode.
*/
@ExperimentalComposeUiApi
actual val Insert = Key(KeyEvent.KEYCODE_INSERT)
/** Cut key. */
@ExperimentalComposeUiApi
actual val Cut = Key(KeyEvent.KEYCODE_CUT)
/** Copy key. */
@ExperimentalComposeUiApi
actual val Copy = Key(KeyEvent.KEYCODE_COPY)
/** Paste key. */
@ExperimentalComposeUiApi
actual val Paste = Key(KeyEvent.KEYCODE_PASTE)
/** '`' (backtick) key. */
@ExperimentalComposeUiApi
actual val Grave = Key(KeyEvent.KEYCODE_GRAVE)
/** '[' key. */
@ExperimentalComposeUiApi
actual val LeftBracket = Key(KeyEvent.KEYCODE_LEFT_BRACKET)
/** ']' key. */
@ExperimentalComposeUiApi
actual val RightBracket = Key(KeyEvent.KEYCODE_RIGHT_BRACKET)
/** '/' key. */
@ExperimentalComposeUiApi
actual val Slash = Key(KeyEvent.KEYCODE_SLASH)
/** '