mirror of
https://github.com/IllusionMan1212/ndk-odin.git
synced 2026-10-23 18:12:31 +00:00
progress
This commit is contained in:
+2172
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,9 @@
|
||||
package android
|
||||
|
||||
//
|
||||
// Based on NDK r26b (26.1.10909125)
|
||||
//
|
||||
|
||||
// Apparently the app still needs to have a manifest, it also MUST use the nativeactivity activity.
|
||||
// Apparently the native code MUST be built as a shared library and then loaded by the JNI(?)
|
||||
// Good ref: https://github.com/xlab/android-go/blob/master/examples/build-android.sh
|
||||
|
||||
+762
@@ -0,0 +1,762 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
Keycode :: enum {
|
||||
/** Unknown key code. */
|
||||
UNKNOWN = 0,
|
||||
/** 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. */
|
||||
SOFT_LEFT = 1,
|
||||
/** 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. */
|
||||
SOFT_RIGHT = 2,
|
||||
/** Home key.
|
||||
* This key is handled by the framework and is never delivered to applications. */
|
||||
HOME = 3,
|
||||
/** Back key. */
|
||||
BACK = 4,
|
||||
/** Call key. */
|
||||
CALL = 5,
|
||||
/** End Call key. */
|
||||
ENDCALL = 6,
|
||||
/** '0' key. */
|
||||
KEY_0 = 7,
|
||||
/** '1' key. */
|
||||
KEY_1 = 8,
|
||||
/** '2' key. */
|
||||
KEY_2 = 9,
|
||||
/** '3' key. */
|
||||
KEY_3 = 10,
|
||||
/** '4' key. */
|
||||
KEY_4 = 11,
|
||||
/** '5' key. */
|
||||
KEY_5 = 12,
|
||||
/** '6' key. */
|
||||
KEY_6 = 13,
|
||||
/** '7' key. */
|
||||
KEY_7 = 14,
|
||||
/** '8' key. */
|
||||
KEY_8 = 15,
|
||||
/** '9' key. */
|
||||
KEY_9 = 16,
|
||||
/** '*' key. */
|
||||
STAR = 17,
|
||||
/** '#' key. */
|
||||
POUND = 18,
|
||||
/** Directional Pad Up key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
DPAD_UP = 19,
|
||||
/** Directional Pad Down key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
DPAD_DOWN = 20,
|
||||
/** Directional Pad Left key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
DPAD_LEFT = 21,
|
||||
/** Directional Pad Right key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
DPAD_RIGHT = 22,
|
||||
/** Directional Pad Center key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
DPAD_CENTER = 23,
|
||||
/** Volume Up key.
|
||||
* Adjusts the speaker volume up. */
|
||||
VOLUME_UP = 24,
|
||||
/** Volume Down key.
|
||||
* Adjusts the speaker volume down. */
|
||||
VOLUME_DOWN = 25,
|
||||
/** Power key. */
|
||||
POWER = 26,
|
||||
/** Camera key.
|
||||
* Used to launch a camera application or take pictures. */
|
||||
CAMERA = 27,
|
||||
/** Clear key. */
|
||||
CLEAR = 28,
|
||||
/** 'A' key. */
|
||||
A = 29,
|
||||
/** 'B' key. */
|
||||
B = 30,
|
||||
/** 'C' key. */
|
||||
C = 31,
|
||||
/** 'D' key. */
|
||||
D = 32,
|
||||
/** 'E' key. */
|
||||
E = 33,
|
||||
/** 'F' key. */
|
||||
F = 34,
|
||||
/** 'G' key. */
|
||||
G = 35,
|
||||
/** 'H' key. */
|
||||
H = 36,
|
||||
/** 'I' key. */
|
||||
I = 37,
|
||||
/** 'J' key. */
|
||||
J = 38,
|
||||
/** 'K' key. */
|
||||
K = 39,
|
||||
/** 'L' key. */
|
||||
L = 40,
|
||||
/** 'M' key. */
|
||||
M = 41,
|
||||
/** 'N' key. */
|
||||
N = 42,
|
||||
/** 'O' key. */
|
||||
O = 43,
|
||||
/** 'P' key. */
|
||||
P = 44,
|
||||
/** 'Q' key. */
|
||||
Q = 45,
|
||||
/** 'R' key. */
|
||||
R = 46,
|
||||
/** 'S' key. */
|
||||
S = 47,
|
||||
/** 'T' key. */
|
||||
T = 48,
|
||||
/** 'U' key. */
|
||||
U = 49,
|
||||
/** 'V' key. */
|
||||
V = 50,
|
||||
/** 'W' key. */
|
||||
W = 51,
|
||||
/** 'X' key. */
|
||||
X = 52,
|
||||
/** 'Y' key. */
|
||||
Y = 53,
|
||||
/** 'Z' key. */
|
||||
Z = 54,
|
||||
/** ',' key. */
|
||||
COMMA = 55,
|
||||
/** '.' key. */
|
||||
PERIOD = 56,
|
||||
/** Left Alt modifier key. */
|
||||
ALT_LEFT = 57,
|
||||
/** Right Alt modifier key. */
|
||||
ALT_RIGHT = 58,
|
||||
/** Left Shift modifier key. */
|
||||
SHIFT_LEFT = 59,
|
||||
/** Right Shift modifier key. */
|
||||
SHIFT_RIGHT = 60,
|
||||
/** Tab key. */
|
||||
TAB = 61,
|
||||
/** Space key. */
|
||||
SPACE = 62,
|
||||
/** Symbol modifier key.
|
||||
* Used to enter alternate symbols. */
|
||||
SYM = 63,
|
||||
/** Explorer special function key.
|
||||
* Used to launch a browser application. */
|
||||
EXPLORER = 64,
|
||||
/** Envelope special function key.
|
||||
* Used to launch a mail application. */
|
||||
ENVELOPE = 65,
|
||||
/** Enter key. */
|
||||
ENTER = 66,
|
||||
/** Backspace key.
|
||||
* Deletes characters before the insertion point, unlike {@link FORWARD_DEL}. */
|
||||
DEL = 67,
|
||||
/** '`' (backtick) key. */
|
||||
GRAVE = 68,
|
||||
/** '-'. */
|
||||
MINUS = 69,
|
||||
/** '=' key. */
|
||||
EQUALS = 70,
|
||||
/** '[' key. */
|
||||
LEFT_BRACKET = 71,
|
||||
/** ']' key. */
|
||||
RIGHT_BRACKET = 72,
|
||||
/** '\' key. */
|
||||
BACKSLASH = 73,
|
||||
/** ';' key. */
|
||||
SEMICOLON = 74,
|
||||
/** ''' (apostrophe) key. */
|
||||
APOSTROPHE = 75,
|
||||
/** '/' key. */
|
||||
SLASH = 76,
|
||||
/** '@' key. */
|
||||
AT = 77,
|
||||
/** Number modifier key.
|
||||
* Used to enter numeric symbols.
|
||||
* This key is not {@link NUM_LOCK}; it is more like {@link AKEYCODE_ALT_LEFT}. */
|
||||
NUM = 78,
|
||||
/** Headset Hook key.
|
||||
* Used to hang up calls and stop media. */
|
||||
HEADSETHOOK = 79,
|
||||
/** Camera Focus key.
|
||||
* Used to focus the camera. */
|
||||
FOCUS = 80,
|
||||
/** '+' key. */
|
||||
PLUS = 81,
|
||||
/** Menu key. */
|
||||
MENU = 82,
|
||||
/** Notification key. */
|
||||
NOTIFICATION = 83,
|
||||
/** Search key. */
|
||||
SEARCH = 84,
|
||||
/** Play/Pause media key. */
|
||||
MEDIA_PLAY_PAUSE= 85,
|
||||
/** Stop media key. */
|
||||
MEDIA_STOP = 86,
|
||||
/** Play Next media key. */
|
||||
MEDIA_NEXT = 87,
|
||||
/** Play Previous media key. */
|
||||
MEDIA_PREVIOUS = 88,
|
||||
/** Rewind media key. */
|
||||
MEDIA_REWIND = 89,
|
||||
/** Fast Forward media key. */
|
||||
MEDIA_FAST_FORWARD = 90,
|
||||
/** Mute key.
|
||||
* Mutes the microphone, unlike {@link VOLUME_MUTE}. */
|
||||
MUTE = 91,
|
||||
/** Page Up key. */
|
||||
PAGE_UP = 92,
|
||||
/** Page Down key. */
|
||||
PAGE_DOWN = 93,
|
||||
/** Picture Symbols modifier key.
|
||||
* Used to switch symbol sets (Emoji, Kao-moji). */
|
||||
PICTSYMBOLS = 94,
|
||||
/** Switch Charset modifier key.
|
||||
* Used to switch character sets (Kanji, Katakana). */
|
||||
SWITCH_CHARSET = 95,
|
||||
/** A Button key.
|
||||
* On a game controller, the A button should be either the button labeled A
|
||||
* or the first button on the bottom row of controller buttons. */
|
||||
BUTTON_A = 96,
|
||||
/** B Button key.
|
||||
* On a game controller, the B button should be either the button labeled B
|
||||
* or the second button on the bottom row of controller buttons. */
|
||||
BUTTON_B = 97,
|
||||
/** C Button key.
|
||||
* On a game controller, the C button should be either the button labeled C
|
||||
* or the third button on the bottom row of controller buttons. */
|
||||
BUTTON_C = 98,
|
||||
/** X Button key.
|
||||
* On a game controller, the X button should be either the button labeled X
|
||||
* or the first button on the upper row of controller buttons. */
|
||||
BUTTON_X = 99,
|
||||
/** Y Button key.
|
||||
* On a game controller, the Y button should be either the button labeled Y
|
||||
* or the second button on the upper row of controller buttons. */
|
||||
BUTTON_Y = 100,
|
||||
/** Z Button key.
|
||||
* On a game controller, the Z button should be either the button labeled Z
|
||||
* or the third button on the upper row of controller buttons. */
|
||||
BUTTON_Z = 101,
|
||||
/** L1 Button key.
|
||||
* On a game controller, the L1 button should be either the button labeled L1 (or L)
|
||||
* or the top left trigger button. */
|
||||
BUTTON_L1 = 102,
|
||||
/** R1 Button key.
|
||||
* On a game controller, the R1 button should be either the button labeled R1 (or R)
|
||||
* or the top right trigger button. */
|
||||
BUTTON_R1 = 103,
|
||||
/** L2 Button key.
|
||||
* On a game controller, the L2 button should be either the button labeled L2
|
||||
* or the bottom left trigger button. */
|
||||
BUTTON_L2 = 104,
|
||||
/** R2 Button key.
|
||||
* On a game controller, the R2 button should be either the button labeled R2
|
||||
* or the bottom right trigger button. */
|
||||
BUTTON_R2 = 105,
|
||||
/** Left Thumb Button key.
|
||||
* On a game controller, the left thumb button indicates that the left (or only)
|
||||
* joystick is pressed. */
|
||||
BUTTON_THUMBL = 106,
|
||||
/** Right Thumb Button key.
|
||||
* On a game controller, the right thumb button indicates that the right
|
||||
* joystick is pressed. */
|
||||
BUTTON_THUMBR = 107,
|
||||
/** Start Button key.
|
||||
* On a game controller, the button labeled Start. */
|
||||
BUTTON_START = 108,
|
||||
/** Select Button key.
|
||||
* On a game controller, the button labeled Select. */
|
||||
BUTTON_SELECT = 109,
|
||||
/** Mode Button key.
|
||||
* On a game controller, the button labeled Mode. */
|
||||
BUTTON_MODE = 110,
|
||||
/** Escape key. */
|
||||
ESCAPE = 111,
|
||||
/** Forward Delete key.
|
||||
* Deletes characters ahead of the insertion point, unlike {@link DEL}. */
|
||||
FORWARD_DEL = 112,
|
||||
/** Left Control modifier key. */
|
||||
CTRL_LEFT = 113,
|
||||
/** Right Control modifier key. */
|
||||
CTRL_RIGHT = 114,
|
||||
/** Caps Lock key. */
|
||||
CAPS_LOCK = 115,
|
||||
/** Scroll Lock key. */
|
||||
SCROLL_LOCK = 116,
|
||||
/** Left Meta modifier key. */
|
||||
META_LEFT = 117,
|
||||
/** Right Meta modifier key. */
|
||||
META_RIGHT = 118,
|
||||
/** Function modifier key. */
|
||||
FUNCTION = 119,
|
||||
/** System Request / Print Screen key. */
|
||||
SYSRQ = 120,
|
||||
/** Break / Pause key. */
|
||||
BREAK = 121,
|
||||
/** Home Movement key.
|
||||
* Used for scrolling or moving the cursor around to the start of a line
|
||||
* or to the top of a list. */
|
||||
MOVE_HOME = 122,
|
||||
/** End Movement key.
|
||||
* Used for scrolling or moving the cursor around to the end of a line
|
||||
* or to the bottom of a list. */
|
||||
MOVE_END = 123,
|
||||
/** Insert key.
|
||||
* Toggles insert / overwrite edit mode. */
|
||||
INSERT = 124,
|
||||
/** Forward key.
|
||||
* Navigates forward in the history stack. Complement of {@link BACK}. */
|
||||
FORWARD = 125,
|
||||
/** Play media key. */
|
||||
MEDIA_PLAY = 126,
|
||||
/** Pause media key. */
|
||||
MEDIA_PAUSE = 127,
|
||||
/** Close media key.
|
||||
* May be used to close a CD tray, for example. */
|
||||
MEDIA_CLOSE = 128,
|
||||
/** Eject media key.
|
||||
* May be used to eject a CD tray, for example. */
|
||||
MEDIA_EJECT = 129,
|
||||
/** Record media key. */
|
||||
MEDIA_RECORD = 130,
|
||||
/** F1 key. */
|
||||
F1 = 131,
|
||||
/** F2 key. */
|
||||
F2 = 132,
|
||||
/** F3 key. */
|
||||
F3 = 133,
|
||||
/** F4 key. */
|
||||
F4 = 134,
|
||||
/** F5 key. */
|
||||
F5 = 135,
|
||||
/** F6 key. */
|
||||
F6 = 136,
|
||||
/** F7 key. */
|
||||
F7 = 137,
|
||||
/** F8 key. */
|
||||
F8 = 138,
|
||||
/** F9 key. */
|
||||
F9 = 139,
|
||||
/** F10 key. */
|
||||
F10 = 140,
|
||||
/** F11 key. */
|
||||
F11 = 141,
|
||||
/** F12 key. */
|
||||
F12 = 142,
|
||||
/** Num Lock key.
|
||||
* This is the Num Lock key; it is different from {@link NUM}.
|
||||
* This key alters the behavior of other keys on the numeric keypad. */
|
||||
NUM_LOCK = 143,
|
||||
/** Numeric keypad '0' key. */
|
||||
NUMPAD_0 = 144,
|
||||
/** Numeric keypad '1' key. */
|
||||
NUMPAD_1 = 145,
|
||||
/** Numeric keypad '2' key. */
|
||||
NUMPAD_2 = 146,
|
||||
/** Numeric keypad '3' key. */
|
||||
NUMPAD_3 = 147,
|
||||
/** Numeric keypad '4' key. */
|
||||
NUMPAD_4 = 148,
|
||||
/** Numeric keypad '5' key. */
|
||||
NUMPAD_5 = 149,
|
||||
/** Numeric keypad '6' key. */
|
||||
NUMPAD_6 = 150,
|
||||
/** Numeric keypad '7' key. */
|
||||
NUMPAD_7 = 151,
|
||||
/** Numeric keypad '8' key. */
|
||||
NUMPAD_8 = 152,
|
||||
/** Numeric keypad '9' key. */
|
||||
NUMPAD_9 = 153,
|
||||
/** Numeric keypad '/' key (for division). */
|
||||
NUMPAD_DIVIDE = 154,
|
||||
/** Numeric keypad '*' key (for multiplication). */
|
||||
NUMPAD_MULTIPLY = 155,
|
||||
/** Numeric keypad '-' key (for subtraction). */
|
||||
NUMPAD_SUBTRACT = 156,
|
||||
/** Numeric keypad '+' key (for addition). */
|
||||
NUMPAD_ADD = 157,
|
||||
/** Numeric keypad '.' key (for decimals or digit grouping). */
|
||||
NUMPAD_DOT = 158,
|
||||
/** Numeric keypad ',' key (for decimals or digit grouping). */
|
||||
NUMPAD_COMMA = 159,
|
||||
/** Numeric keypad Enter key. */
|
||||
NUMPAD_ENTER = 160,
|
||||
/** Numeric keypad '=' key. */
|
||||
NUMPAD_EQUALS = 161,
|
||||
/** Numeric keypad '(' key. */
|
||||
NUMPAD_LEFT_PAREN = 162,
|
||||
/** Numeric keypad ')' key. */
|
||||
NUMPAD_RIGHT_PAREN = 163,
|
||||
/** Volume Mute key.
|
||||
* Mutes the speaker, unlike {@link MUTE}.
|
||||
* This key should normally be implemented as a toggle such that the first press
|
||||
* mutes the speaker and the second press restores the original volume. */
|
||||
VOLUME_MUTE = 164,
|
||||
/** Info key.
|
||||
* Common on TV remotes to show additional information related to what is
|
||||
* currently being viewed. */
|
||||
INFO = 165,
|
||||
/** Channel up key.
|
||||
* On TV remotes, increments the television channel. */
|
||||
CHANNEL_UP = 166,
|
||||
/** Channel down key.
|
||||
* On TV remotes, decrements the television channel. */
|
||||
CHANNEL_DOWN = 167,
|
||||
/** Zoom in key. */
|
||||
ZOOM_IN = 168,
|
||||
/** Zoom out key. */
|
||||
ZOOM_OUT = 169,
|
||||
/** TV key.
|
||||
* On TV remotes, switches to viewing live TV. */
|
||||
TV = 170,
|
||||
/** Window key.
|
||||
* On TV remotes, toggles picture-in-picture mode or other windowing functions. */
|
||||
WINDOW = 171,
|
||||
/** Guide key.
|
||||
* On TV remotes, shows a programming guide. */
|
||||
GUIDE = 172,
|
||||
/** DVR key.
|
||||
* On some TV remotes, switches to a DVR mode for recorded shows. */
|
||||
DVR = 173,
|
||||
/** Bookmark key.
|
||||
* On some TV remotes, bookmarks content or web pages. */
|
||||
BOOKMARK = 174,
|
||||
/** Toggle captions key.
|
||||
* Switches the mode for closed-captioning text, for example during television shows. */
|
||||
CAPTIONS = 175,
|
||||
/** Settings key.
|
||||
* Starts the system settings activity. */
|
||||
SETTINGS = 176,
|
||||
/** TV power key.
|
||||
* On TV remotes, toggles the power on a television screen. */
|
||||
TV_POWER = 177,
|
||||
/** TV input key.
|
||||
* On TV remotes, switches the input on a television screen. */
|
||||
TV_INPUT = 178,
|
||||
/** Set-top-box power key.
|
||||
* On TV remotes, toggles the power on an external Set-top-box. */
|
||||
STB_POWER = 179,
|
||||
/** Set-top-box input key.
|
||||
* On TV remotes, switches the input mode on an external Set-top-box. */
|
||||
STB_INPUT = 180,
|
||||
/** A/V Receiver power key.
|
||||
* On TV remotes, toggles the power on an external A/V Receiver. */
|
||||
AVR_POWER = 181,
|
||||
/** A/V Receiver input key.
|
||||
* On TV remotes, switches the input mode on an external A/V Receiver. */
|
||||
AVR_INPUT = 182,
|
||||
/** Red "programmable" key.
|
||||
* On TV remotes, acts as a contextual/programmable key. */
|
||||
PROG_RED = 183,
|
||||
/** Green "programmable" key.
|
||||
* On TV remotes, actsas a contextual/programmable key. */
|
||||
PROG_GREEN = 184,
|
||||
/** Yellow "programmable" key.
|
||||
* On TV remotes, acts as a contextual/programmable key. */
|
||||
PROG_YELLOW = 185,
|
||||
/** Blue "programmable" key.
|
||||
* On TV remotes, acts as a contextual/programmable key. */
|
||||
PROG_BLUE = 186,
|
||||
/** App switch key.
|
||||
* Should bring up the application switcher dialog. */
|
||||
APP_SWITCH = 187,
|
||||
/** Generic Game Pad Button #1.*/
|
||||
BUTTON_1 = 188,
|
||||
/** Generic Game Pad Button #2.*/
|
||||
BUTTON_2 = 189,
|
||||
/** Generic Game Pad Button #3.*/
|
||||
BUTTON_3 = 190,
|
||||
/** Generic Game Pad Button #4.*/
|
||||
BUTTON_4 = 191,
|
||||
/** Generic Game Pad Button #5.*/
|
||||
BUTTON_5 = 192,
|
||||
/** Generic Game Pad Button #6.*/
|
||||
BUTTON_6 = 193,
|
||||
/** Generic Game Pad Button #7.*/
|
||||
BUTTON_7 = 194,
|
||||
/** Generic Game Pad Button #8.*/
|
||||
BUTTON_8 = 195,
|
||||
/** Generic Game Pad Button #9.*/
|
||||
BUTTON_9 = 196,
|
||||
/** Generic Game Pad Button #10.*/
|
||||
BUTTON_10 = 197,
|
||||
/** Generic Game Pad Button #11.*/
|
||||
BUTTON_11 = 198,
|
||||
/** Generic Game Pad Button #12.*/
|
||||
BUTTON_12 = 199,
|
||||
/** Generic Game Pad Button #13.*/
|
||||
BUTTON_13 = 200,
|
||||
/** Generic Game Pad Button #14.*/
|
||||
BUTTON_14 = 201,
|
||||
/** Generic Game Pad Button #15.*/
|
||||
BUTTON_15 = 202,
|
||||
/** Generic Game Pad Button #16.*/
|
||||
BUTTON_16 = 203,
|
||||
/** Language Switch key.
|
||||
* Toggles the current input language such as switching between English and Japanese on
|
||||
* a QWERTY keyboard. On some devices, the same function may be performed by
|
||||
* pressing Shift+Spacebar. */
|
||||
LANGUAGE_SWITCH = 204,
|
||||
/** Manner Mode key.
|
||||
* Toggles silent or vibrate mode on and off to make the device behave more politely
|
||||
* in certain settings such as on a crowded train. On some devices, the key may only
|
||||
* operate when long-pressed. */
|
||||
MANNER_MODE = 205,
|
||||
/** 3D Mode key.
|
||||
* Toggles the display between 2D and 3D mode. */
|
||||
3D_MODE = 206,
|
||||
/** Contacts special function key.
|
||||
* Used to launch an address book application. */
|
||||
CONTACTS = 207,
|
||||
/** Calendar special function key.
|
||||
* Used to launch a calendar application. */
|
||||
CALENDAR = 208,
|
||||
/** Music special function key.
|
||||
* Used to launch a music player application. */
|
||||
MUSIC = 209,
|
||||
/** Calculator special function key.
|
||||
* Used to launch a calculator application. */
|
||||
CALCULATOR = 210,
|
||||
/** Japanese full-width / half-width key. */
|
||||
ZENKAKU_HANKAKU = 211,
|
||||
/** Japanese alphanumeric key. */
|
||||
EISU = 212,
|
||||
/** Japanese non-conversion key. */
|
||||
MUHENKAN = 213,
|
||||
/** Japanese conversion key. */
|
||||
HENKAN = 214,
|
||||
/** Japanese katakana / hiragana key. */
|
||||
KATAKANA_HIRAGANA = 215,
|
||||
/** Japanese Yen key. */
|
||||
YEN = 216,
|
||||
/** Japanese Ro key. */
|
||||
RO = 217,
|
||||
/** Japanese kana key. */
|
||||
KANA = 218,
|
||||
/** Assist key.
|
||||
* Launches the global assist activity. Not delivered to applications. */
|
||||
ASSIST = 219,
|
||||
/** Brightness Down key.
|
||||
* Adjusts the screen brightness down. */
|
||||
BRIGHTNESS_DOWN = 220,
|
||||
/** Brightness Up key.
|
||||
* Adjusts the screen brightness up. */
|
||||
BRIGHTNESS_UP = 221,
|
||||
/** Audio Track key.
|
||||
* Switches the audio tracks. */
|
||||
MEDIA_AUDIO_TRACK = 222,
|
||||
/** Sleep key.
|
||||
* Puts the device to sleep. Behaves somewhat like {@link POWER} but it
|
||||
* has no effect if the device is already asleep. */
|
||||
SLEEP = 223,
|
||||
/** Wakeup key.
|
||||
* Wakes up the device. Behaves somewhat like {@link POWER} but it
|
||||
* has no effect if the device is already awake. */
|
||||
WAKEUP = 224,
|
||||
/** Pairing key.
|
||||
* Initiates peripheral pairing mode. Useful for pairing remote control
|
||||
* devices or game controllers, especially if no other input mode is
|
||||
* available. */
|
||||
PAIRING = 225,
|
||||
/** Media Top Menu key.
|
||||
* Goes to the top of media menu. */
|
||||
MEDIA_TOP_MENU = 226,
|
||||
/** '11' key. */
|
||||
11 = 227,
|
||||
/** '12' key. */
|
||||
12 = 228,
|
||||
/** Last Channel key.
|
||||
* Goes to the last viewed channel. */
|
||||
LAST_CHANNEL = 229,
|
||||
/** TV data service key.
|
||||
* Displays data services like weather, sports. */
|
||||
TV_DATA_SERVICE = 230,
|
||||
/** Voice Assist key.
|
||||
* Launches the global voice assist activity. Not delivered to applications. */
|
||||
VOICE_ASSIST = 231,
|
||||
/** Radio key.
|
||||
* Toggles TV service / Radio service. */
|
||||
TV_RADIO_SERVICE = 232,
|
||||
/** Teletext key.
|
||||
* Displays Teletext service. */
|
||||
TV_TELETEXT = 233,
|
||||
/** Number entry key.
|
||||
* Initiates to enter multi-digit channel nubmber when each digit key is assigned
|
||||
* for selecting separate channel. Corresponds to Number Entry Mode (0x1D) of CEC
|
||||
* User Control Code. */
|
||||
TV_NUMBER_ENTRY = 234,
|
||||
/** Analog Terrestrial key.
|
||||
* Switches to analog terrestrial broadcast service. */
|
||||
TV_TERRESTRIAL_ANALOG = 235,
|
||||
/** Digital Terrestrial key.
|
||||
* Switches to digital terrestrial broadcast service. */
|
||||
TV_TERRESTRIAL_DIGITAL = 236,
|
||||
/** Satellite key.
|
||||
* Switches to digital satellite broadcast service. */
|
||||
TV_SATELLITE = 237,
|
||||
/** BS key.
|
||||
* Switches to BS digital satellite broadcasting service available in Japan. */
|
||||
TV_SATELLITE_BS = 238,
|
||||
/** CS key.
|
||||
* Switches to CS digital satellite broadcasting service available in Japan. */
|
||||
TV_SATELLITE_CS = 239,
|
||||
/** BS/CS key.
|
||||
* Toggles between BS and CS digital satellite services. */
|
||||
TV_SATELLITE_SERVICE = 240,
|
||||
/** Toggle Network key.
|
||||
* Toggles selecting broacast services. */
|
||||
TV_NETWORK = 241,
|
||||
/** Antenna/Cable key.
|
||||
* Toggles broadcast input source between antenna and cable. */
|
||||
TV_ANTENNA_CABLE = 242,
|
||||
/** HDMI #1 key.
|
||||
* Switches to HDMI input #1. */
|
||||
TV_INPUT_HDMI_1 = 243,
|
||||
/** HDMI #2 key.
|
||||
* Switches to HDMI input #2. */
|
||||
TV_INPUT_HDMI_2 = 244,
|
||||
/** HDMI #3 key.
|
||||
* Switches to HDMI input #3. */
|
||||
TV_INPUT_HDMI_3 = 245,
|
||||
/** HDMI #4 key.
|
||||
* Switches to HDMI input #4. */
|
||||
TV_INPUT_HDMI_4 = 246,
|
||||
/** Composite #1 key.
|
||||
* Switches to composite video input #1. */
|
||||
TV_INPUT_COMPOSITE_1 = 247,
|
||||
/** Composite #2 key.
|
||||
* Switches to composite video input #2. */
|
||||
TV_INPUT_COMPOSITE_2 = 248,
|
||||
/** Component #1 key.
|
||||
* Switches to component video input #1. */
|
||||
TV_INPUT_COMPONENT_1 = 249,
|
||||
/** Component #2 key.
|
||||
* Switches to component video input #2. */
|
||||
TV_INPUT_COMPONENT_2 = 250,
|
||||
/** VGA #1 key.
|
||||
* Switches to VGA (analog RGB) input #1. */
|
||||
TV_INPUT_VGA_1 = 251,
|
||||
/** Audio description key.
|
||||
* Toggles audio description off / on. */
|
||||
TV_AUDIO_DESCRIPTION = 252,
|
||||
/** Audio description mixing volume up key.
|
||||
* Louden audio description volume as compared with normal audio volume. */
|
||||
TV_AUDIO_DESCRIPTION_MIX_UP = 253,
|
||||
/** Audio description mixing volume down key.
|
||||
* Lessen audio description volume as compared with normal audio volume. */
|
||||
TV_AUDIO_DESCRIPTION_MIX_DOWN = 254,
|
||||
/** Zoom mode key.
|
||||
* Changes Zoom mode (Normal, Full, Zoom, Wide-zoom, etc.) */
|
||||
TV_ZOOM_MODE = 255,
|
||||
/** Contents menu key.
|
||||
* Goes to the title list. Corresponds to Contents Menu (0x0B) of CEC User Control
|
||||
* Code */
|
||||
TV_CONTENTS_MENU = 256,
|
||||
/** Media context menu key.
|
||||
* Goes to the context menu of media contents. Corresponds to Media Context-sensitive
|
||||
* Menu (0x11) of CEC User Control Code. */
|
||||
TV_MEDIA_CONTEXT_MENU = 257,
|
||||
/** Timer programming key.
|
||||
* Goes to the timer recording menu. Corresponds to Timer Programming (0x54) of
|
||||
* CEC User Control Code. */
|
||||
TV_TIMER_PROGRAMMING = 258,
|
||||
/** Help key. */
|
||||
HELP = 259,
|
||||
NAVIGATE_PREVIOUS = 260,
|
||||
NAVIGATE_NEXT = 261,
|
||||
NAVIGATE_IN = 262,
|
||||
NAVIGATE_OUT = 263,
|
||||
/** Primary stem key for Wear
|
||||
* Main power/reset button on watch. */
|
||||
STEM_PRIMARY = 264,
|
||||
/** Generic stem key 1 for Wear */
|
||||
STEM_1 = 265,
|
||||
/** Generic stem key 2 for Wear */
|
||||
STEM_2 = 266,
|
||||
/** Generic stem key 3 for Wear */
|
||||
STEM_3 = 267,
|
||||
/** Directional Pad Up-Left */
|
||||
DPAD_UP_LEFT = 268,
|
||||
/** Directional Pad Down-Left */
|
||||
DPAD_DOWN_LEFT = 269,
|
||||
/** Directional Pad Up-Right */
|
||||
DPAD_UP_RIGHT = 270,
|
||||
/** Directional Pad Down-Right */
|
||||
DPAD_DOWN_RIGHT = 271,
|
||||
/** Skip forward media key */
|
||||
MEDIA_SKIP_FORWARD = 272,
|
||||
/** Skip backward media key */
|
||||
MEDIA_SKIP_BACKWARD = 273,
|
||||
/** Step forward media key.
|
||||
* Steps media forward one from at a time. */
|
||||
MEDIA_STEP_FORWARD = 274,
|
||||
/** Step backward media key.
|
||||
* Steps media backward one from at a time. */
|
||||
MEDIA_STEP_BACKWARD = 275,
|
||||
/** Put device to sleep unless a wakelock is held. */
|
||||
SOFT_SLEEP = 276,
|
||||
/** Cut key. */
|
||||
CUT = 277,
|
||||
/** Copy key. */
|
||||
COPY = 278,
|
||||
/** Paste key. */
|
||||
PASTE = 279,
|
||||
/** fingerprint navigation key, up. */
|
||||
SYSTEM_NAVIGATION_UP = 280,
|
||||
/** fingerprint navigation key, down. */
|
||||
SYSTEM_NAVIGATION_DOWN = 281,
|
||||
/** fingerprint navigation key, left. */
|
||||
SYSTEM_NAVIGATION_LEFT = 282,
|
||||
/** fingerprint navigation key, right. */
|
||||
SYSTEM_NAVIGATION_RIGHT = 283,
|
||||
/** all apps */
|
||||
ALL_APPS = 284,
|
||||
/** refresh key */
|
||||
REFRESH = 285,
|
||||
/** Thumbs up key. Apps can use this to let user upvote content. */
|
||||
THUMBS_UP = 286,
|
||||
/** Thumbs down key. Apps can use this to let user downvote content. */
|
||||
THUMBS_DOWN = 287,
|
||||
/** Used to switch current account that is consuming content.
|
||||
* May be consumed by system to switch current viewer profile. */
|
||||
PROFILE_SWITCH = 288,
|
||||
/** Video Application key #1. */
|
||||
VIDEO_APP_1 = 289,
|
||||
/** Video Application key #2. */
|
||||
VIDEO_APP_2 = 290,
|
||||
/** Video Application key #3. */
|
||||
VIDEO_APP_3 = 291,
|
||||
/** Video Application key #4. */
|
||||
VIDEO_APP_4 = 292,
|
||||
/** Video Application key #5. */
|
||||
VIDEO_APP_5 = 293,
|
||||
/** Video Application key #6. */
|
||||
VIDEO_APP_6 = 294,
|
||||
/** Video Application key #7. */
|
||||
VIDEO_APP_7 = 295,
|
||||
/** Video Application key #8. */
|
||||
VIDEO_APP_8 = 296,
|
||||
/** Featured Application key #1. */
|
||||
FEATURED_APP_1 = 297,
|
||||
/** Featured Application key #2. */
|
||||
FEATURED_APP_2 = 298,
|
||||
/** Featured Application key #3. */
|
||||
FEATURED_APP_3 = 299,
|
||||
/** Featured Application key #4. */
|
||||
FEATURED_APP_4 = 300,
|
||||
/** Demo Application key #1. */
|
||||
DEMO_APP_1 = 301,
|
||||
/** Demo Application key #2. */
|
||||
DEMO_APP_2 = 302,
|
||||
/** Demo Application key #3. */
|
||||
DEMO_APP_3 = 303,
|
||||
/** Demo Application key #4. */
|
||||
DEMO_APP_4 = 304,
|
||||
}
|
||||
+213
-3
@@ -1,10 +1,96 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
import "core:c"
|
||||
|
||||
foreign import android "system:android"
|
||||
|
||||
|
||||
/** Option for for ALooper_prepare(). */
|
||||
/**
|
||||
* This looper will accept calls to ALooper_addFd() that do not
|
||||
* have a callback (that is provide NULL for the callback). In
|
||||
* this case the caller of ALooper_pollOnce() or ALooper_pollAll()
|
||||
* MUST check the return from these functions to discover when
|
||||
* data is available on such fds and process it.
|
||||
*/
|
||||
ALOOPER_PREPARE_ALLOW_NON_CALLBACKS = 1<<0
|
||||
|
||||
/** Result from ALooper_pollOnce() and ALooper_pollAll(). */
|
||||
ALooperPollResult :: enum i32 {
|
||||
/**
|
||||
* The poll was awoken using wake() before the timeout expired
|
||||
* and no callbacks were executed and no other file descriptors were ready.
|
||||
*/
|
||||
WAKE = -1,
|
||||
|
||||
/**
|
||||
* Result from ALooper_pollOnce() and ALooper_pollAll():
|
||||
* One or more callbacks were executed.
|
||||
*/
|
||||
CALLBACK = -2,
|
||||
|
||||
/**
|
||||
* Result from ALooper_pollOnce() and ALooper_pollAll():
|
||||
* The timeout expired.
|
||||
*/
|
||||
TIMEOUT = -3,
|
||||
|
||||
/**
|
||||
* Result from ALooper_pollOnce() and ALooper_pollAll():
|
||||
* An error occurred.
|
||||
*/
|
||||
ERROR = -4,
|
||||
}
|
||||
|
||||
PollResultOrIdent :: union {
|
||||
ALooperPollResult,
|
||||
i32,
|
||||
}
|
||||
|
||||
/**
|
||||
* Flags for file descriptor events that a looper can monitor.
|
||||
*
|
||||
* These flag bits can be combined to monitor multiple events at once.
|
||||
*/
|
||||
ALooperFdFlagsBits :: enum i32 {
|
||||
/**
|
||||
* The file descriptor is available for read operations.
|
||||
*/
|
||||
INPUT = 0,
|
||||
|
||||
/**
|
||||
* The file descriptor is available for write operations.
|
||||
*/
|
||||
OUTPUT = 1,
|
||||
|
||||
/**
|
||||
* The file descriptor has encountered an error condition.
|
||||
*
|
||||
* The looper always sends notifications about errors; it is not necessary
|
||||
* to specify this event flag in the requested event set.
|
||||
*/
|
||||
ERROR = 2,
|
||||
|
||||
/**
|
||||
* The file descriptor was hung up.
|
||||
* For example, indicates that the remote end of a pipe or socket was closed.
|
||||
*
|
||||
* The looper always sends notifications about hangups; it is not necessary
|
||||
* to specify this event flag in the requested event set.
|
||||
*/
|
||||
HANGUP = 3,
|
||||
|
||||
/**
|
||||
* The file descriptor is invalid.
|
||||
* For example, the file descriptor was closed prematurely.
|
||||
*
|
||||
* The looper always sends notifications about invalid file descriptors; it is not necessary
|
||||
* to specify this event flag in the requested event set.
|
||||
*/
|
||||
INVALID = 4,
|
||||
}
|
||||
|
||||
ALooperFdFlags :: bit_set[ALooperFdFlagsBits; i32]
|
||||
|
||||
/**
|
||||
* ALooper
|
||||
*
|
||||
@@ -20,11 +106,135 @@ foreign import android "system:android"
|
||||
*/
|
||||
ALooper :: struct{}
|
||||
|
||||
/**
|
||||
* For callback-based event loops, this is the prototype of the function
|
||||
* that is called when a file descriptor event occurs.
|
||||
* It is given the file descriptor it is associated with,
|
||||
* a bitmask of the poll events that were triggered (typically ALOOPER_EVENT_INPUT),
|
||||
* and the data pointer that was originally supplied.
|
||||
*
|
||||
* Implementations should return 1 to continue receiving callbacks, or 0
|
||||
* to have this file descriptor and callback unregistered from the looper.
|
||||
*/
|
||||
ALooper_callbackFunc :: #type proc "c" (fd: i32, events: ALooperFdFlags, data: rawptr) -> i32
|
||||
|
||||
foreign android {
|
||||
/**
|
||||
* Returns the looper associated with the calling thread, or NULL if
|
||||
* there is not one.
|
||||
*/
|
||||
ALooper_forThread :: proc() -> ^ALooper ---
|
||||
|
||||
/**
|
||||
* Prepares a looper associated with the calling thread, and returns it.
|
||||
* If the thread already has a looper, it is returned. Otherwise, a new
|
||||
* one is created, associated with the thread, and returned.
|
||||
*
|
||||
* The opts may be ALOOPER_PREPARE_ALLOW_NON_CALLBACKS or 0.
|
||||
*/
|
||||
ALooper_prepare :: proc(opts: i32) -> ^ALooper ---
|
||||
|
||||
/**
|
||||
* Acquire a reference on the given ALooper object. This prevents the object
|
||||
* from being deleted until the reference is removed. This is only needed
|
||||
* to safely hand an ALooper from one thread to another.
|
||||
*/
|
||||
ALooper_acquire :: proc(looper: ^ALooper) ---
|
||||
|
||||
/**
|
||||
* Remove a reference that was previously acquired with ALooper_acquire().
|
||||
*/
|
||||
ALooper_release :: proc(looper: ^ALooper) ---
|
||||
|
||||
/**
|
||||
* Waits for events to be available, with optional timeout in milliseconds.
|
||||
* Invokes callbacks for all file descriptors on which an event occurred.
|
||||
*
|
||||
* If the timeout is zero, returns immediately without blocking.
|
||||
* If the timeout is negative, waits indefinitely until an event appears.
|
||||
*
|
||||
* Returns ALOOPER_POLL_WAKE if the poll was awoken using wake() before
|
||||
* the timeout expired and no callbacks were invoked and no other file
|
||||
* descriptors were ready.
|
||||
*
|
||||
* Returns ALOOPER_POLL_CALLBACK if one or more callbacks were invoked.
|
||||
*
|
||||
* Returns ALOOPER_POLL_TIMEOUT if there was no data before the given
|
||||
* timeout expired.
|
||||
*
|
||||
* Returns ALOOPER_POLL_ERROR if an error occurred.
|
||||
*
|
||||
* Returns a value >= 0 containing an identifier (the same identifier
|
||||
* `ident` passed to ALooper_addFd()) if its file descriptor has data
|
||||
* and it has no callback function (requiring the caller here to
|
||||
* handle it). In this (and only this) case outFd, outEvents and
|
||||
* outData will contain the poll events and data associated with the
|
||||
* fd, otherwise they will be set to NULL.
|
||||
*
|
||||
* This method does not return until it has finished invoking the appropriate callbacks
|
||||
* for all file descriptors that were signalled.
|
||||
*/
|
||||
ALooper_pollOnce :: proc(timeoutMillis: i32, outFd: ^i32, outEvents: ^i32, outData: ^rawptr) -> PollResultOrIdent ---
|
||||
|
||||
/**
|
||||
* Like ALooper_pollOnce(), but performs all pending callbacks until all
|
||||
* data has been consumed or a file descriptor is available with no callback.
|
||||
* This function will never return ALOOPER_POLL_CALLBACK.
|
||||
*/
|
||||
ALooper_pollAll :: proc(timeoutMillis: c.int, outFd: ^c.int, outEvents: ^c.int, outData: ^rawptr) -> c.int ---
|
||||
ALooper_pollAll :: proc(timeoutMillis: i32, outFd: ^i32, outEvents: ^i32, outData: ^rawptr) -> PollResultOrIdent ---
|
||||
|
||||
/**
|
||||
* Wakes the poll asynchronously.
|
||||
*
|
||||
* This method can be called on any thread.
|
||||
* This method returns immediately.
|
||||
*/
|
||||
ALooper_wake :: proc(looper: ^ALooper) ---
|
||||
|
||||
/**
|
||||
* Adds a new file descriptor to be polled by the looper.
|
||||
* If the same file descriptor was previously added, it is replaced.
|
||||
*
|
||||
* "fd" is the file descriptor to be added.
|
||||
* "ident" is an identifier for this event, which is returned from ALooper_pollOnce().
|
||||
* The identifier must be >= 0, or ALOOPER_POLL_CALLBACK if providing a non-NULL callback.
|
||||
* "events" are the poll events to wake up on. Typically this is ALOOPER_EVENT_INPUT.
|
||||
* "callback" is the function to call when there is an event on the file descriptor.
|
||||
* "data" is a private data pointer to supply to the callback.
|
||||
*
|
||||
* There are two main uses of this function:
|
||||
*
|
||||
* (1) If "callback" is non-NULL, then this function will be called when there is
|
||||
* data on the file descriptor. It should execute any events it has pending,
|
||||
* appropriately reading from the file descriptor. The 'ident' is ignored in this case.
|
||||
*
|
||||
* (2) If "callback" is NULL, the 'ident' will be returned by ALooper_pollOnce
|
||||
* when its file descriptor has data available, requiring the caller to take
|
||||
* care of processing it.
|
||||
*
|
||||
* Returns 1 if the file descriptor was added or -1 if an error occurred.
|
||||
*
|
||||
* This method can be called on any thread.
|
||||
* This method may block briefly if it needs to wake the poll.
|
||||
*/
|
||||
ALooper_addFd :: proc(looper: ^ALooper, fd: i32, ident: i32, events: ALooperFdFlags, callback: ALooper_callbackFunc, data: rawptr) -> i32 ---
|
||||
|
||||
/**
|
||||
* Removes a previously added file descriptor from the looper.
|
||||
*
|
||||
* When this method returns, it is safe to close the file descriptor since the looper
|
||||
* will no longer have a reference to it. However, it is possible for the callback to
|
||||
* already be running or for it to run one last time if the file descriptor was already
|
||||
* signalled. Calling code is responsible for ensuring that this case is safely handled.
|
||||
* For example, if the callback takes care of removing itself during its own execution either
|
||||
* by returning 0 or by calling this method, then it can be guaranteed to not be invoked
|
||||
* again at any later time unless registered anew.
|
||||
*
|
||||
* Returns 1 if the file descriptor was removed, 0 if none was previously registered
|
||||
* or -1 if an error occurred.
|
||||
*
|
||||
* This method can be called on any thread.
|
||||
* This method may block briefly if it needs to wake the poll.
|
||||
*/
|
||||
ALooper_removeFd :: proc(looper: ^ALooper, fd: i32) -> i32 ---
|
||||
}
|
||||
|
||||
@@ -0,0 +1,262 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
foreign import android "system:android"
|
||||
|
||||
/**
|
||||
* The corresponding C type for android.net.Network#getNetworkHandle() return
|
||||
* values. The Java signed long value can be safely cast to a net_handle_t:
|
||||
*
|
||||
* [C] ((net_handle_t) java_long_network_handle)
|
||||
* [C++] static_cast<net_handle_t>(java_long_network_handle)
|
||||
*
|
||||
* as appropriate.
|
||||
*/
|
||||
net_handle_t :: distinct u64
|
||||
|
||||
uid_t :: u32
|
||||
|
||||
/**
|
||||
* The value NETWORK_UNSPECIFIED indicates no specific network.
|
||||
*
|
||||
* For some functions (documented below), a previous binding may be cleared
|
||||
* by an invocation with NETWORK_UNSPECIFIED.
|
||||
*
|
||||
* Depending on the context it may indicate an error. It is expressly
|
||||
* not used to indicate some notion of the "current default network".
|
||||
*/
|
||||
NETWORK_UNSPECIFIED :: net_handle_t(0)
|
||||
|
||||
/**
|
||||
* Possible values of the flags argument to android_res_nsend and android_res_nquery.
|
||||
* Values are ORed together.
|
||||
*/
|
||||
ResNsendFlagsBits :: enum u32 {
|
||||
/**
|
||||
* Send a single request to a single resolver and fail on timeout or network errors
|
||||
*/
|
||||
RESOLV_NO_RETRY = 0,
|
||||
|
||||
/**
|
||||
* Don't lookup this request in the cache, and don't cache the result of the lookup.
|
||||
* This flag implies {@link #ANDROID_RESOLV_NO_CACHE_LOOKUP}.
|
||||
*/
|
||||
RESOLV_NO_CACHE_STORE = 1,
|
||||
|
||||
/**
|
||||
* Don't lookup the request in cache.
|
||||
*/
|
||||
RESOLV_NO_CACHE_LOOKUP = 2,
|
||||
}
|
||||
|
||||
ResNsendFlags :: bit_set[ResNsendFlagsBits; u32]
|
||||
|
||||
foreign android {
|
||||
/**
|
||||
* All functions below that return an i32 return 0 on success or -1
|
||||
* on failure with an appropriate errno value set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the network to be used by the given socket file descriptor.
|
||||
*
|
||||
* To clear a previous socket binding, invoke with NETWORK_UNSPECIFIED.
|
||||
*
|
||||
* This is the equivalent of: [android.net.Network#bindSocket()](https://developer.android.com/reference/android/net/Network.html#bindSocket(java.net.Socket))
|
||||
*
|
||||
* Available since API level 23.
|
||||
*/
|
||||
android_setsocknetwork :: proc(network: net_handle_t, fd: i32) -> i32 ---
|
||||
|
||||
|
||||
/**
|
||||
* Binds the current process to |network|. All sockets created in the future
|
||||
* (and not explicitly bound via android_setsocknetwork()) will be bound to
|
||||
* |network|. All host name resolutions will be limited to |network| as well.
|
||||
* Note that if the network identified by |network| ever disconnects, all
|
||||
* sockets created in this way will cease to work and all host name
|
||||
* resolutions will fail. This is by design so an application doesn't
|
||||
* accidentally use sockets it thinks are still bound to a particular network.
|
||||
*
|
||||
* To clear a previous process binding, invoke with NETWORK_UNSPECIFIED.
|
||||
*
|
||||
* This is the equivalent of: [android.net.ConnectivityManager#bindProcessToNetwork()](https://developer.android.com/reference/android/net/ConnectivityManager.html#bindProcessToNetwork(android.net.Network))
|
||||
*
|
||||
* Available since API level 23.
|
||||
*/
|
||||
android_setprocnetwork :: proc(network: net_handle_t) -> i32 ---
|
||||
|
||||
|
||||
/**
|
||||
* Gets the |network| bound to the current process, as per android_setprocnetwork.
|
||||
*
|
||||
* This is the equivalent of: [android.net.ConnectivityManager#getBoundNetworkForProcess()](https://developer.android.com/reference/android/net/ConnectivityManager.html#getBoundNetworkForProcess(android.net.Network))
|
||||
* Returns 0 on success, or -1 setting errno to EINVAL if a null pointer is
|
||||
* passed in.
|
||||
*
|
||||
*
|
||||
* Available since API level 31.
|
||||
*/
|
||||
android_getprocnetwork :: proc(network: ^net_handle_t) -> i32 ---
|
||||
|
||||
/**
|
||||
* Binds domain name resolutions performed by this process to |network|.
|
||||
* android_setprocnetwork takes precedence over this setting.
|
||||
*
|
||||
* To clear a previous process binding, invoke with NETWORK_UNSPECIFIED.
|
||||
* On success 0 is returned. On error -1 is returned, and errno is set.
|
||||
*
|
||||
* Available since API level 31.
|
||||
*/
|
||||
android_setprocdns :: proc(network: net_handle_t) -> i32 ---
|
||||
|
||||
/**
|
||||
* Gets the |network| to which domain name resolutions are bound on the
|
||||
* current process.
|
||||
*
|
||||
* Returns 0 on success, or -1 setting errno to EINVAL if a null pointer is
|
||||
* passed in.
|
||||
*
|
||||
* Available since API level 31.
|
||||
*/
|
||||
android_getprocdns :: proc(network: ^net_handle_t) -> i32 ---
|
||||
|
||||
|
||||
/**
|
||||
* Perform hostname resolution via the DNS servers associated with |network|.
|
||||
*
|
||||
* All arguments (apart from |network|) are used identically as those passed
|
||||
* to getaddrinfo(3). Return and error values are identical to those of
|
||||
* getaddrinfo(3), and in particular gai_strerror(3) can be used as expected.
|
||||
* Similar to getaddrinfo(3):
|
||||
* - |hints| may be NULL (in which case man page documented defaults apply)
|
||||
* - either |node| or |service| may be NULL, but not both
|
||||
* - |res| must not be NULL
|
||||
*
|
||||
* This is the equivalent of: [android.net.Network#getAllByName()](https://developer.android.com/reference/android/net/Network.html#getAllByName(java.lang.String))
|
||||
*
|
||||
* Available since API level 23.
|
||||
*/
|
||||
android_getaddrinfofornetwork :: proc(network: net_handle_t, node: cstring, service: cstring, hints: ^addrinfo, res: ^^addrinfo) -> i32 ---
|
||||
|
||||
/**
|
||||
* Look up the {|ns_class|, |ns_type|} Resource Record (RR) associated
|
||||
* with Domain Name |dname| on the given |network|.
|
||||
* The typical value for |ns_class| is ns_c_in, while |type| can be any
|
||||
* record type (for instance, ns_t_aaaa or ns_t_txt).
|
||||
* |flags| is a additional config to control actual querying behavior, see
|
||||
* ResNsendFlags for detail.
|
||||
*
|
||||
* Returns a file descriptor to watch for read events, or a negative
|
||||
* POSIX error code (see errno.h) if an immediate error occurs.
|
||||
*
|
||||
* Available since API level 29.
|
||||
*/
|
||||
android_res_nquery :: proc(network: net_handle_t, dname: cstring, ns_class: i32, ns_type: i32, flags: ResNsendFlags) -> i32 ---
|
||||
|
||||
/**
|
||||
* Issue the query |msg| on the given |network|.
|
||||
* |flags| is a additional config to control actual querying behavior, see
|
||||
* ResNsendFlags for detail.
|
||||
*
|
||||
* Returns a file descriptor to watch for read events, or a negative
|
||||
* POSIX error code (see errno.h) if an immediate error occurs.
|
||||
*
|
||||
* Available since API level 29.
|
||||
*/
|
||||
android_res_nsend :: proc(network: net_handle_t, msg: [^]byte, msglen: uint, flags: ResNsendFlags) -> i32 ---
|
||||
|
||||
/**
|
||||
* Read a result for the query associated with the |fd| descriptor.
|
||||
* Closes |fd| before returning.
|
||||
*
|
||||
* Available since 29.
|
||||
*
|
||||
* Returns:
|
||||
* < 0: negative POSIX error code (see errno.h for possible values). |rcode| is not set.
|
||||
* >= 0: length of |answer|. |rcode| is the resolver return code (e.g., ns_r_nxdomain)
|
||||
*/
|
||||
android_res_nresult :: proc(fd: i32, rcode: ^int, answer: [^]byte, anslen: uint) -> i32 ---
|
||||
|
||||
/**
|
||||
* Attempts to cancel the in-progress query associated with the |nsend_fd|
|
||||
* descriptor.
|
||||
*
|
||||
* Available since API level 29.
|
||||
*/
|
||||
android_res_cancel :: proc(nsend_fd: i32) ---
|
||||
|
||||
/*
|
||||
* Set the socket tag and owning UID for traffic statistics on the specified
|
||||
* socket.
|
||||
*
|
||||
* Subsequent calls always replace any existing parameters. The socket tag and
|
||||
* uid (if set) are kept when the socket is sent to another process using binder
|
||||
* IPCs or other mechanisms such as UNIX socket fd passing. Any app can accept
|
||||
* blame for future traffic performed on a socket originally created by another
|
||||
* app by calling this method with its own UID (or calling
|
||||
* android_tag_socket(int sockfd, int tag)). However, only apps holding the
|
||||
* android.Manifest.permission#UPDATE_DEVICE_STATS permission may assign blame
|
||||
* to another UIDs. If unset (default) the socket tag is 0, and the uid is the
|
||||
* socket creator's uid.
|
||||
*
|
||||
* Returns 0 on success, or a negative POSIX error code (see errno.h) on
|
||||
* failure.
|
||||
*
|
||||
* Available since API level 33.
|
||||
*/
|
||||
android_tag_socket_with_uid :: proc(sockfd: i32, tag: u32, uid: uid_t) -> i32 ---
|
||||
|
||||
/*
|
||||
* Set the socket tag for traffic statistics on the specified socket.
|
||||
*
|
||||
* This function tags the socket with the caller's UID (accepting blame for
|
||||
* future traffic performed on this socket) even if the socket was originally
|
||||
* opened by another UID or was previously tagged by another UID. Subsequent
|
||||
* calls always replace any existing parameters. The socket tag is kept when the
|
||||
* socket is sent to another process using binder IPCs or other mechanisms such
|
||||
* as UNIX socket fd passing. The tag is a value defined by the caller and used
|
||||
* together with uid for data traffic accounting, so that the function callers
|
||||
* can account different types of data usage for a uid.
|
||||
*
|
||||
* Returns 0 on success, or a negative POSIX error code (see errno.h) on
|
||||
* failure.
|
||||
*
|
||||
* Some possible error codes:
|
||||
* -EBADF Bad socketfd.
|
||||
* -EPERM No permission.
|
||||
* -EAFNOSUPPORT Socket family is neither AF_INET nor AF_INET6.
|
||||
* -EPROTONOSUPPORT Socket protocol is neither IPPROTO_UDP nor IPPROTO_TCP.
|
||||
* -EMFILE Too many stats entries.
|
||||
* There are still other error codes that may provided by -errno of
|
||||
* [getsockopt()](https://man7.org/linux/man-pages/man2/getsockopt.2.html) or by
|
||||
* BPF maps read/write sys calls, which are set appropriately.
|
||||
*
|
||||
* Available since API level 33.
|
||||
*/
|
||||
android_tag_socket :: proc(sockfd: i32, tag: u32) -> i32 ---
|
||||
|
||||
/*
|
||||
* Untag a network socket.
|
||||
*
|
||||
* Future traffic on this socket will no longer be associated with any
|
||||
* previously configured tag and uid. If the socket was created by another UID
|
||||
* or was previously tagged by another UID, calling this function will clear the
|
||||
* statistics parameters, and thus the UID blamed for traffic on the socket will
|
||||
* be the UID that originally created the socket, even if the socket was
|
||||
* subsequently tagged by a different UID.
|
||||
*
|
||||
* Returns 0 on success, or a negative POSIX error code (see errno.h) on
|
||||
* failure.
|
||||
*
|
||||
* One of possible error code:
|
||||
* -EBADF Bad socketfd.
|
||||
* Other error codes are either provided by -errno of
|
||||
* [getsockopt()](https://man7.org/linux/man-pages/man2/getsockopt.2.html) or by
|
||||
* BPF map element deletion sys call, which are set appropriately.
|
||||
*
|
||||
* Available since API level 33.
|
||||
*/
|
||||
android_untag_socket :: proc(sockfd: i32) -> i32 ---
|
||||
}
|
||||
|
||||
+95
-4
@@ -1,7 +1,43 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
import "core:c"
|
||||
foreign import android "system:android"
|
||||
|
||||
/**
|
||||
* Flags for ANativeActivity_showSoftInput see the Java InputMethodManager
|
||||
* API for documentation.
|
||||
*/
|
||||
ShowSoftInputFlags :: enum u32 {
|
||||
/**
|
||||
* Implicit request to show the input window, not as the result
|
||||
* of a direct request by the user.
|
||||
*/
|
||||
IMPLICIT = 0x0001,
|
||||
|
||||
/**
|
||||
* The user has forced the input method open (such as by
|
||||
* long-pressing menu) so it should not be closed until they
|
||||
* explicitly do so.
|
||||
*/
|
||||
FORCED = 0x0002,
|
||||
}
|
||||
|
||||
/**
|
||||
* Flags for ANativeActivity_hideSoftInput see the Java InputMethodManager
|
||||
* API for documentation.
|
||||
*/
|
||||
HideSoftInputFlags :: enum {
|
||||
/**
|
||||
* The soft input window should only be hidden if it was not
|
||||
* explicitly shown by the user.
|
||||
*/
|
||||
IMPLICIT_ONLY = 0x0001,
|
||||
/**
|
||||
* The soft input window should normally be hidden, unless it was
|
||||
* originally shown with {@link ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED}.
|
||||
*/
|
||||
NOT_ALWAYS = 0x0002,
|
||||
}
|
||||
|
||||
/**
|
||||
* This structure defines the native side of an android.app.NativeActivity.
|
||||
@@ -54,7 +90,7 @@ ANativeActivity :: struct {
|
||||
/**
|
||||
* The platform's SDK version code.
|
||||
*/
|
||||
sdkVersion: c.int32_t,
|
||||
sdkVersion: i32,
|
||||
|
||||
/**
|
||||
* This is the native instance of the application. It is not used by
|
||||
@@ -105,7 +141,7 @@ ANativeActivityCallbacks :: struct {
|
||||
* saved state will be persisted, so it can not contain any active
|
||||
* entities (pointers to memory, file descriptors, etc).
|
||||
*/
|
||||
onSaveInstanceState: #type proc "c" (activity: ^ANativeActivity, outSize: ^c.size_t) -> rawptr,
|
||||
onSaveInstanceState: #type proc "c" (activity: ^ANativeActivity, outSize: ^uint) -> rawptr,
|
||||
|
||||
/**
|
||||
* NativeActivity has paused. See Java documentation for Activity.onPause()
|
||||
@@ -129,7 +165,7 @@ ANativeActivityCallbacks :: struct {
|
||||
* Focus has changed in this NativeActivity's window. This is often used,
|
||||
* for example, to pause a game when it loses input focus.
|
||||
*/
|
||||
onWindowFocusChanged: #type proc "c" (activity: ^ANativeActivity, hasFocus: c.int),
|
||||
onWindowFocusChanged: #type proc "c" (activity: ^ANativeActivity, hasFocus: i32),
|
||||
|
||||
/**
|
||||
* The drawing window for this native activity has been created. You
|
||||
@@ -194,3 +230,58 @@ ANativeActivityCallbacks :: struct {
|
||||
onLowMemory: #type proc "c" (activity: ^ANativeActivity),
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the function that must be in the native code to instantiate the
|
||||
* application's native activity. It is called with the activity instance (see
|
||||
* above); if the code is being instantiated from a previously saved instance,
|
||||
* the savedState will be non-NULL and point to the saved data. You must make
|
||||
* any copy of this data you need -- it will be released after you return from
|
||||
* this function.
|
||||
*/
|
||||
ANativeActivity_createFunc :: #type proc "c" (activity: ^ANativeActivity, savedState: rawptr, savedStateSize: uint)
|
||||
|
||||
|
||||
foreign android {
|
||||
/**
|
||||
* Finish the given activity. Its finish() method will be called, causing it
|
||||
* to be stopped and destroyed. Note that this method can be called from
|
||||
* *any* thread it will send a message to the main thread of the process
|
||||
* where the Java finish call will take place.
|
||||
*/
|
||||
ANativeActivity_finish :: proc(activity: ^ANativeActivity) ---
|
||||
|
||||
/**
|
||||
* Change the window format of the given activity. Calls getWindow().setFormat()
|
||||
* of the given activity. Note that this method can be called from
|
||||
* *any* thread it will send a message to the main thread of the process
|
||||
* where the Java finish call will take place.
|
||||
*/
|
||||
// TODO: wtf is format here ?? is there an enum or constants for this proc?
|
||||
// I think this might be AHardwareBuffer_Format, but annoyingly so, it's u32 while this proc requires i32.
|
||||
ANativeActivity_setWindowFormat :: proc(activity: ^ANativeActivity, format: i32) ---
|
||||
|
||||
/**
|
||||
* Change the window flags of the given activity. Calls getWindow().setFlags()
|
||||
* of the given activity. Note that this method can be called from
|
||||
* *any* thread it will send a message to the main thread of the process
|
||||
* where the Java finish call will take place. See window.h for flag constants.
|
||||
*/
|
||||
ANativeActivity_setWindowFlags :: proc(activity: ^ANativeActivity, addFlags: WindowFlags, removeFlags: WindowFlags) ---
|
||||
|
||||
/**
|
||||
* Show the IME while in the given activity. Calls InputMethodManager.showSoftInput()
|
||||
* for the given activity. Note that this method can be called from
|
||||
* *any* thread it will send a message to the main thread of the process
|
||||
* where the Java finish call will take place.
|
||||
*/
|
||||
ANativeActivity_showSoftInput :: proc(activity: ^ANativeActivity, flags: ShowSoftInputFlags) ---
|
||||
|
||||
/**
|
||||
* Hide the IME while in the given activity. Calls InputMethodManager.hideSoftInput()
|
||||
* for the given activity. Note that this method can be called from
|
||||
* *any* thread it will send a message to the main thread of the process
|
||||
* where the Java finish call will take place.
|
||||
*/
|
||||
ANativeActivity_hideSoftInput :: proc(activity: ^ANativeActivity, flags: HideSoftInputFlags) ---
|
||||
}
|
||||
|
||||
|
||||
+259
-18
@@ -1,6 +1,74 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
/**
|
||||
* Legacy window pixel format names, kept for backwards compatibility.
|
||||
* New code and APIs should use AHARDWAREBUFFER_FORMAT_*.
|
||||
*/
|
||||
ANativeWindow_LegacyFormat :: enum {
|
||||
// NOTE: these values must match the values from graphics/common/x.x/types.hal
|
||||
|
||||
/** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/
|
||||
RGBA_8888 = AHardwareBuffer_Format.R8G8B8A8_UNORM,
|
||||
/** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Unused: 8 bits. **/
|
||||
RGBX_8888 = AHardwareBuffer_Format.R8G8B8X8_UNORM,
|
||||
/** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/
|
||||
RGB_565 = AHardwareBuffer_Format.R5G6B5_UNORM,
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms that can be applied to buffers as they are displayed to a window.
|
||||
*
|
||||
* Supported transforms are any combination of horizontal mirror, vertical
|
||||
* mirror, and clockwise 90 degree rotation, in that order. Rotations of 180
|
||||
* and 270 degrees are made up of those basic transforms.
|
||||
*/
|
||||
ANativeWindowTransform :: enum i32 {
|
||||
IDENTITY = 0x00,
|
||||
MIRROR_HORIZONTAL = 0x01,
|
||||
MIRROR_VERTICAL = 0x02,
|
||||
ROTATE_90 = 0x04,
|
||||
|
||||
ROTATE_180 = MIRROR_HORIZONTAL | MIRROR_VERTICAL,
|
||||
ROTATE_270 = ROTATE_180 | ROTATE_90,
|
||||
}
|
||||
|
||||
/** Compatibility value for ANativeWindow_setFrameRate. */
|
||||
ANativeWindow_FrameRateCompatibility :: enum i8 {
|
||||
/**
|
||||
* There are no inherent restrictions on the frame rate of this window. When
|
||||
* the system selects a frame rate other than what the app requested, the
|
||||
* app will be able to run at the system frame rate without requiring pull
|
||||
* down. This value should be used when displaying game content, UIs, and
|
||||
* anything that isn't video.
|
||||
*/
|
||||
DEFAULT = 0,
|
||||
/**
|
||||
* This window is being used to display content with an inherently fixed
|
||||
* frame rate, e.g.\ a video that has a specific frame rate. When the system
|
||||
* selects a frame rate other than what the app requested, the app will need
|
||||
* to do pull down or use some other technique to adapt to the system's
|
||||
* frame rate. The user experience is likely to be worse (e.g. more frame
|
||||
* stuttering) than it would be if the system had chosen the app's requested
|
||||
* frame rate. This value should be used for video content.
|
||||
*/
|
||||
FIXED_SOURCE = 1
|
||||
}
|
||||
|
||||
/** Change frame rate strategy value for ANativeWindow_setFrameRate. */
|
||||
// Available since API level 31.
|
||||
ANativeWindow_ChangeFrameRateStrategy :: enum i8 {
|
||||
/**
|
||||
* Change the frame rate only if the transition is going to be seamless.
|
||||
*/
|
||||
ONLY_IF_SEAMLESS = 0,
|
||||
/**
|
||||
* Change the frame rate even if the transition is going to be non-seamless,
|
||||
* i.e. with visual interruptions for the user.
|
||||
*/
|
||||
ALWAYS = 1
|
||||
}
|
||||
|
||||
/**
|
||||
* Opaque type that provides access to a native window.
|
||||
*
|
||||
@@ -8,28 +76,46 @@ package android
|
||||
*/
|
||||
ANativeWindow :: struct{}
|
||||
|
||||
/**
|
||||
* Struct that represents a windows buffer.
|
||||
*
|
||||
* A pointer can be obtained using {@link ANativeWindow_lock()}.
|
||||
*/
|
||||
ANativeWindow_Buffer :: struct {
|
||||
/// The number of pixels that are shown horizontally.
|
||||
width: i32,
|
||||
|
||||
/// The number of pixels that are shown vertically.
|
||||
height: i32,
|
||||
|
||||
/// The number of *pixels* that a line in the buffer takes in
|
||||
/// memory. This may be >= width.
|
||||
stride: i32,
|
||||
|
||||
/// The format of the buffer. One of AHardwareBuffer_Format.
|
||||
// TODO: u32/i32 mismatch with the enum.
|
||||
int32_t format,
|
||||
|
||||
/// The actual bits.
|
||||
bits: rawptr,
|
||||
|
||||
/// Do not touch.
|
||||
reserved: [6]u32,
|
||||
}
|
||||
|
||||
foreign import android "system:android"
|
||||
|
||||
foreign android {
|
||||
/**
|
||||
* Change the format and size of the window buffers.
|
||||
*
|
||||
* The width and height control the number of pixels in the buffers, not the
|
||||
* dimensions of the window on screen. If these are different than the
|
||||
* window's physical size, then its buffer will be scaled to match that size
|
||||
* when compositing it to the screen. The width and height must be either both zero
|
||||
* or both non-zero.
|
||||
*
|
||||
* For all of these parameters, if 0 is supplied then the window's base
|
||||
* value will come back in force.
|
||||
*
|
||||
* \param window pointer to an ANativeWindow object.
|
||||
* \param width width of the buffers in pixels.
|
||||
* \param height height of the buffers in pixels.
|
||||
* \param format one of the AHardwareBuffer_Format constants.
|
||||
* \return 0 for success, or a negative value on error.
|
||||
*/
|
||||
ANativeWindow_setBuffersGeometry :: proc(window: ^ANativeWindow, width: i32, height: i32, format: i32) -> i32 ---
|
||||
* Acquire a reference on the given {@link ANativeWindow} object. This prevents the object
|
||||
* from being deleted until the reference is removed.
|
||||
*/
|
||||
ANativeWindow_acquire :: proc(window: ^ANativeWindow) ---
|
||||
|
||||
/**
|
||||
* Remove a reference that was previously acquired with {@link ANativeWindow_acquire()}.
|
||||
*/
|
||||
ANativeWindow_release :: proc(window: ^ANativeWindow) ---
|
||||
|
||||
/**
|
||||
* Return the current width in pixels of the window surface.
|
||||
@@ -44,4 +130,159 @@ foreign android {
|
||||
* \return a negative value on error.
|
||||
*/
|
||||
ANativeWindow_getHeight :: proc(window: ^ANativeWindow) -> i32 ---
|
||||
|
||||
/**
|
||||
* Return the current pixel format (AHARDWAREBUFFER_FORMAT_*) of the window surface.
|
||||
*
|
||||
* \return a negative value on error.
|
||||
*/
|
||||
// TODO: should return AHardwarebuffer_Format but i32/u32 mismatch
|
||||
ANativeWindow_getFormat :: proc(window: ^ANativeWindow) -> i32 ---
|
||||
|
||||
/**
|
||||
* Change the format and size of the window buffers.
|
||||
*
|
||||
* The width and height control the number of pixels in the buffers, not the
|
||||
* dimensions of the window on screen. If these are different than the
|
||||
* window's physical size, then its buffer will be scaled to match that size
|
||||
* when compositing it to the screen. The width and height must be either both zero
|
||||
* or both non-zero.
|
||||
*
|
||||
* For all of these parameters, if 0 is supplied then the window's base
|
||||
* value will come back in force.
|
||||
*
|
||||
* \param window pointer to an ANativeWindow object.
|
||||
* \param width width of the buffers in pixels.
|
||||
* \param height height of the buffers in pixels.
|
||||
* \param format one of the AHardwareBuffer_Format constants.
|
||||
* \return 0 for success, or a negative value on error.
|
||||
*/
|
||||
ANativeWindow_setBuffersGeometry :: proc(window: ^ANativeWindow, width: i32, height: i32, format: i32) -> i32 ---
|
||||
|
||||
/**
|
||||
* Lock the window's next drawing surface for writing.
|
||||
* inOutDirtyBounds is used as an in/out parameter, upon entering the
|
||||
* function, it contains the dirty region, that is, the region the caller
|
||||
* intends to redraw. When the function returns, inOutDirtyBounds is updated
|
||||
* with the actual area the caller needs to redraw -- this region is often
|
||||
* extended by {@link ANativeWindow_lock}.
|
||||
*
|
||||
* \return 0 for success, or a negative value on error.
|
||||
*/
|
||||
ANativeWindow_lock :: proc(window: ^ANativeWindow, outBuffer: ^ANativeWindow_Buffer, inOutDirtyBounds: ^ARect) -> i32 ---
|
||||
|
||||
/**
|
||||
* Unlock the window's drawing surface after previously locking it,
|
||||
* posting the new buffer to the display.
|
||||
*
|
||||
* \return 0 for success, or a negative value on error.
|
||||
*/
|
||||
ANativeWindow_unlockAndPost :: proc(window: ^ANativeWindow) -> i32 ---
|
||||
|
||||
/**
|
||||
* Set a transform that will be applied to future buffers posted to the window.
|
||||
*
|
||||
* Available since API level 26.
|
||||
*
|
||||
* \param window pointer to an ANativeWindow object.
|
||||
* \param transform combination of {@link ANativeWindowTransform} flags
|
||||
* \return 0 for success, or -EINVAL if \p transform is invalid
|
||||
*/
|
||||
ANativeWindow_setBuffersTransform :: proc(window: ^ANativeWindow, transform: ANativeWindowTransform) -> i32 ---
|
||||
|
||||
/**
|
||||
* All buffers queued after this call will be associated with the dataSpace
|
||||
* parameter specified.
|
||||
*
|
||||
* dataSpace specifies additional information about the buffer.
|
||||
* For example, it can be used to convey the color space of the image data in
|
||||
* the buffer, or it can be used to indicate that the buffers contain depth
|
||||
* measurement data instead of color images. The default dataSpace is 0,
|
||||
* ADATASPACE_UNKNOWN, unless it has been overridden by the producer.
|
||||
*
|
||||
* Available since API level 28.
|
||||
*
|
||||
* \param window pointer to an ANativeWindow object.
|
||||
* \param dataSpace data space of all buffers queued after this call.
|
||||
* \return 0 for success, -EINVAL if window is invalid or the dataspace is not
|
||||
* supported.
|
||||
*/
|
||||
ANativeWindow_setBuffersDataSpace :: proc(window: ^ANativeWindow, dataSpace: ADataSpace) -> i32 ---
|
||||
|
||||
/**
|
||||
* Get the dataspace of the buffers in window.
|
||||
*
|
||||
* Available since API level 28.
|
||||
*
|
||||
* \return the dataspace of buffers in window, ADATASPACE_UNKNOWN is returned if
|
||||
* dataspace is unknown, or -EINVAL if window is invalid.
|
||||
*/
|
||||
ANativeWindow_getBuffersDataSpace :: proc(window: ^ANativeWindow) -> ADataSpace ---
|
||||
|
||||
/**
|
||||
* Same as ANativeWindow_setFrameRateWithChangeStrategy(window, frameRate, compatibility,
|
||||
* ANATIVEWINDOW_CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS).
|
||||
*
|
||||
* See ANativeWindow_setFrameRateWithChangeStrategy().
|
||||
*
|
||||
* Available since API level 30.
|
||||
*/
|
||||
ANativeWindow_setFrameRate :: proc(window: ^ANativeWindow, frameRate: f32, compatibility: ANativeWindow_FrameRateCompatibility) -> i32 ---
|
||||
|
||||
/**
|
||||
* Provides a hint to the window that buffers should be preallocated ahead of
|
||||
* time. Note that the window implementation is not guaranteed to preallocate
|
||||
* any buffers, for instance if an implementation disallows allocation of new
|
||||
* buffers, or if there is insufficient memory in the system to preallocate
|
||||
* additional buffers
|
||||
*
|
||||
* Available since API level 30.
|
||||
*/
|
||||
ANativeWindow_tryAllocateBuffers :: proc(window: ^ANativeWindow) ---
|
||||
|
||||
/**
|
||||
* Sets the intended frame rate for this window.
|
||||
*
|
||||
* On devices that are capable of running the display at different refresh
|
||||
* rates, the system may choose a display refresh rate to better match this
|
||||
* window's frame rate. Usage of this API won't introduce frame rate throttling,
|
||||
* or affect other aspects of the application's frame production
|
||||
* pipeline. However, because the system may change the display refresh rate,
|
||||
* calls to this function may result in changes to Choreographer callback
|
||||
* timings, and changes to the time interval at which the system releases
|
||||
* buffers back to the application.
|
||||
*
|
||||
* Note that this only has an effect for windows presented on the display. If
|
||||
* this ANativeWindow is consumed by something other than the system compositor,
|
||||
* e.g. a media codec, this call has no effect.
|
||||
*
|
||||
* You can register for changes in the refresh rate using
|
||||
* \a AChoreographer_registerRefreshRateCallback.
|
||||
*
|
||||
* Available since API level 31.
|
||||
*
|
||||
* \param window pointer to an ANativeWindow object.
|
||||
*
|
||||
* \param frameRate The intended frame rate of this window, in frames per
|
||||
* second. 0 is a special value that indicates the app will accept the system's
|
||||
* choice for the display frame rate, which is the default behavior if this
|
||||
* function isn't called. The frameRate param does <em>not</em> need to be a
|
||||
* valid refresh rate for this device's display - e.g., it's fine to pass 30fps
|
||||
* to a device that can only run the display at 60fps.
|
||||
*
|
||||
* \param compatibility The frame rate compatibility of this window. The
|
||||
* compatibility value may influence the system's choice of display refresh
|
||||
* rate. See the ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_* values for more info.
|
||||
* This parameter is ignored when frameRate is 0.
|
||||
*
|
||||
* \param changeFrameRateStrategy Whether display refresh rate transitions caused by this
|
||||
* window should be seamless.
|
||||
* A seamless transition is one that doesn't have any visual interruptions, such as a black
|
||||
* screen for a second or two. See the ANATIVEWINDOW_CHANGE_FRAME_RATE_* values.
|
||||
* This parameter is ignored when frameRate is 0.
|
||||
*
|
||||
* \return 0 for success, -EINVAL if the window, frame rate, or compatibility
|
||||
* value are invalid.
|
||||
*/
|
||||
ANativeWindow_setFrameRateWithChangeStrategy :: proc(window: ^ANativeWindow, frameRate: f32, compatibility: ANativeWindow_FrameRateCompatibility, changeFrameRateStrategy: ANativeWindow_ChangeFrameRateStrategy) -> i32 ---
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
foreign import android "system:android"
|
||||
|
||||
foreign android {
|
||||
/**
|
||||
* Return the ANativeWindow associated with a Java Surface object,
|
||||
* for interacting with it through native code. This acquires a reference
|
||||
* on the ANativeWindow that is returned be sure to use ANativeWindow_release()
|
||||
* when done with it so that it doesn't leak.
|
||||
*/
|
||||
ANativeWindow_fromSurface :: proc(env: ^JNIEnv, surface: jobject) -> ^ANativeWindow ---
|
||||
|
||||
/**
|
||||
* Return a Java Surface object derived from the ANativeWindow, for interacting
|
||||
* with it through Java code. The returned Java object acquires a reference on
|
||||
* the ANativeWindow maintains it through general Java object's life cycle;
|
||||
* and will automatically release the reference when the Java object gets garbage
|
||||
* collected.
|
||||
*
|
||||
* Available since API level 26.
|
||||
*/
|
||||
ANativeWindow_toSurface :: proc(env: ^JNIEnv, window: ^ANativeWindow) -> jobject ---
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
/**
|
||||
* Set to 1 if this is an NDK, unset otherwise. See
|
||||
* https://android.googlesource.com/platform/bionic/+/master/docs/defines.md.
|
||||
*/
|
||||
__ANDROID_NDK__ :: 1
|
||||
|
||||
/**
|
||||
* Major version of this NDK.
|
||||
*
|
||||
* For example: 16 for r16.
|
||||
*/
|
||||
__NDK_MAJOR__ :: 26
|
||||
|
||||
/**
|
||||
* Minor version of this NDK.
|
||||
*
|
||||
* For example: 0 for r16 and 1 for r16b.
|
||||
*/
|
||||
__NDK_MINOR__ :: 1
|
||||
|
||||
/**
|
||||
* Set to 0 if this is a release build, or 1 for beta 1,
|
||||
* 2 for beta 2, and so on.
|
||||
*/
|
||||
__NDK_BETA__ :: 0
|
||||
|
||||
/**
|
||||
* Build number for this NDK.
|
||||
*
|
||||
* For a local development build of the NDK, this is -1.
|
||||
*/
|
||||
__NDK_BUILD__ :: 10909125
|
||||
|
||||
/**
|
||||
* Set to 1 if this is a canary build, 0 if not.
|
||||
*/
|
||||
__NDK_CANARY__ :: 0
|
||||
|
||||
+191
@@ -0,0 +1,191 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
/**
|
||||
* Window flags, as per the Java API at android.view.WindowManager.LayoutParams.
|
||||
*/
|
||||
WindowFlagsBits :: enum u32 {
|
||||
/**
|
||||
* As long as this window is visible to the user, allow the lock
|
||||
* screen to activate while the screen is on. This can be used
|
||||
* independently, or in combination with {@link
|
||||
* KEEP_SCREEN_ON} and/or {@link
|
||||
* SHOW_WHEN_LOCKED}
|
||||
*/
|
||||
ALLOW_LOCK_WHILE_SCREEN_ON = 0,
|
||||
/** Everything behind this window will be dimmed. */
|
||||
DIM_BEHIND = 1,
|
||||
/**
|
||||
* Blur everything behind this window.
|
||||
* @deprecated Blurring is no longer supported.
|
||||
*/
|
||||
BLUR_BEHIND = 2,
|
||||
/**
|
||||
* This window won't ever get key input focus, so the
|
||||
* user can not send key or other button events to it. Those will
|
||||
* instead go to whatever focusable window is behind it. This flag
|
||||
* will also enable {@link NOT_TOUCH_MODAL} whether or not that
|
||||
* is explicitly set.
|
||||
*
|
||||
* Setting this flag also implies that the window will not need to
|
||||
* interact with
|
||||
* a soft input method, so it will be Z-ordered and positioned
|
||||
* independently of any active input method (typically this means it
|
||||
* gets Z-ordered on top of the input method, so it can use the full
|
||||
* screen for its content and cover the input method if needed. You
|
||||
* can use {@link ALT_FOCUSABLE_IM} to modify this behavior.
|
||||
*/
|
||||
NOT_FOCUSABLE = 3,
|
||||
/** this window can never receive touch events. */
|
||||
NOT_TOUCHABLE = 4,
|
||||
/**
|
||||
* Even when this window is focusable (its
|
||||
* {@link NOT_FOCUSABLE} is not set), allow any pointer events
|
||||
* outside of the window to be sent to the windows behind it. Otherwise
|
||||
* it will consume all pointer events itself, regardless of whether they
|
||||
* are inside of the window.
|
||||
*/
|
||||
NOT_TOUCH_MODAL = 5,
|
||||
/**
|
||||
* When set, if the device is asleep when the touch
|
||||
* screen is pressed, you will receive this first touch event. Usually
|
||||
* the first touch event is consumed by the system since the user can
|
||||
* not see what they are pressing on.
|
||||
*
|
||||
* @deprecated This flag has no effect.
|
||||
*/
|
||||
TOUCHABLE_WHEN_WAKING = 6,
|
||||
/**
|
||||
* As long as this window is visible to the user, keep
|
||||
* the device's screen turned on and bright.
|
||||
*/
|
||||
KEEP_SCREEN_ON = 7,
|
||||
/**
|
||||
* Place the window within the entire screen, ignoring
|
||||
* decorations around the border (such as the status bar). The
|
||||
* window must correctly position its contents to take the screen
|
||||
* decoration into account.
|
||||
*/
|
||||
LAYOUT_IN_SCREEN = 8,
|
||||
/** allow window to extend outside of the screen. */
|
||||
LAYOUT_NO_LIMITS = 9,
|
||||
/**
|
||||
* Hide all screen decorations (such as the status
|
||||
* bar) while this window is displayed. This allows the window to
|
||||
* use the entire display space for itself -- the status bar will
|
||||
* be hidden when an app window with this flag set is on the top
|
||||
* layer. A fullscreen window will ignore a value of
|
||||
* <a href="/reference/android/view/WindowManager.LayoutParams#SOFT_INPUT_ADJUST_RESIZE">
|
||||
* SOFT_INPUT_ADJUST_RESIZE</a>; the window will stay
|
||||
* fullscreen and will not resize.
|
||||
*/
|
||||
FULLSCREEN = 10,
|
||||
/**
|
||||
* Override {@link FULLSCREEN} and force the
|
||||
* screen decorations (such as the status bar) to be shown.
|
||||
*/
|
||||
FORCE_NOT_FULLSCREEN = 11,
|
||||
/**
|
||||
* Turn on dithering when compositing this window to
|
||||
* the screen.
|
||||
* @deprecated This flag is no longer used.
|
||||
*/
|
||||
DITHER = 12,
|
||||
/**
|
||||
* Treat the content of the window as secure, preventing
|
||||
* it from appearing in screenshots or from being viewed on non-secure
|
||||
* displays.
|
||||
*/
|
||||
SECURE = 13,
|
||||
/**
|
||||
* A special mode where the layout parameters are used
|
||||
* to perform scaling of the surface when it is composited to the
|
||||
* screen.
|
||||
*/
|
||||
SCALED = 14,
|
||||
/**
|
||||
* Intended for windows that will often be used when the user is
|
||||
* holding the screen against their face, it will aggressively
|
||||
* filter the event stream to prevent unintended presses in this
|
||||
* situation that may not be desired for a particular window, when
|
||||
* such an event stream is detected, the application will receive
|
||||
* a {@link AMOTION_EVENT_ACTION_CANCEL} to indicate this so
|
||||
* applications can handle this accordingly by taking no action on
|
||||
* the event until the finger is released.
|
||||
*/
|
||||
IGNORE_CHEEK_PRESSES = 15,
|
||||
/**
|
||||
* A special option only for use in combination with
|
||||
* {@link LAYOUT_IN_SCREEN}. When requesting layout in the
|
||||
* screen your window may appear on top of or behind screen decorations
|
||||
* such as the status bar. By also including this flag, the window
|
||||
* manager will report the inset rectangle needed to ensure your
|
||||
* content is not covered by screen decorations.
|
||||
*/
|
||||
LAYOUT_INSET_DECOR = 16,
|
||||
/**
|
||||
* Invert the state of {@link NOT_FOCUSABLE} with
|
||||
* respect to how this window interacts with the current method.
|
||||
* That is, if FLAG_NOT_FOCUSABLE is set and this flag is set,
|
||||
* then the window will behave as if it needs to interact with the
|
||||
* input method and thus be placed behind/away from it; if {@link
|
||||
* NOT_FOCUSABLE} is not set and this flag is set,
|
||||
* then the window will behave as if it doesn't need to interact
|
||||
* with the input method and can be placed to use more space and
|
||||
* cover the input method.
|
||||
*/
|
||||
ALT_FOCUSABLE_IM = 17,
|
||||
/**
|
||||
* If you have set {@link NOT_TOUCH_MODAL}, you
|
||||
* can set this flag to receive a single special MotionEvent with
|
||||
* the action
|
||||
* {@link AMOTION_EVENT_ACTION_OUTSIDE} for
|
||||
* touches that occur outside of your window. Note that you will not
|
||||
* receive the full down/move/up gesture, only the location of the
|
||||
* first down as an {@link AMOTION_EVENT_ACTION_OUTSIDE}.
|
||||
*/
|
||||
WATCH_OUTSIDE_TOUCH = 18,
|
||||
/**
|
||||
* Special flag to let windows be shown when the screen
|
||||
* is locked. This will let application windows take precedence over
|
||||
* key guard or any other lock screens. Can be used with
|
||||
* {@link KEEP_SCREEN_ON} to turn screen on and display windows
|
||||
* directly before showing the key guard window. Can be used with
|
||||
* {@link DISMISS_KEYGUARD} to automatically fully dismisss
|
||||
* non-secure keyguards. This flag only applies to the top-most
|
||||
* full-screen window.
|
||||
*/
|
||||
SHOW_WHEN_LOCKED = 19,
|
||||
/**
|
||||
* Ask that the system wallpaper be shown behind
|
||||
* your window. The window surface must be translucent to be able
|
||||
* to actually see the wallpaper behind it; this flag just ensures
|
||||
* that the wallpaper surface will be there if this window actually
|
||||
* has translucent regions.
|
||||
*/
|
||||
SHOW_WALLPAPER = 20,
|
||||
/**
|
||||
* When set as a window is being added or made
|
||||
* visible, once the window has been shown then the system will
|
||||
* poke the power manager's user activity (as if the user had woken
|
||||
* up the device) to turn the screen on.
|
||||
*/
|
||||
TURN_SCREEN_ON = 21,
|
||||
/**
|
||||
* When set the window will cause the keyguard to
|
||||
* be dismissed, only if it is not a secure lock keyguard. Because such
|
||||
* a keyguard is not needed for security, it will never re-appear if
|
||||
* the user navigates to another window (in contrast to
|
||||
* {@link SHOW_WHEN_LOCKED}, which will only temporarily
|
||||
* hide both secure and non-secure keyguards but ensure they reappear
|
||||
* when the user moves to another UI that doesn't hide them).
|
||||
* If the keyguard is currently active and is secure (requires an
|
||||
* unlock pattern) than the user will still need to confirm it before
|
||||
* seeing this window, unless {@link SHOW_WHEN_LOCKED} has
|
||||
* also been set.
|
||||
*/
|
||||
DISMISS_KEYGUARD = 22,
|
||||
}
|
||||
|
||||
WindowFlags :: bit_set[WindowFlagsBits; u32]
|
||||
|
||||
Reference in New Issue
Block a user