Android Tablet - cursor keys ...

Monkey Targets Forums/Android/Android Tablet - cursor keys ...

necky(Posted 2013) [#1]
Hi!
Does anyone know how to get the keycodes for the Android cursor keys? I'm working with Beaker's awesome bitmap text modules but the cursor keys aren't working right now and I was going to look into why this might be.

The cursors work on the PC but not on the Android at the moment.

Thanks

Mike


necky(Posted 2013) [#2]
Hi again!

I should possibly add that I am trying this on the 'Android Galaxy Note 10.1' with a plugged in keyboard which has cursor keys.

This one:



I would have thought Monkey would recognise the cursors (it does on the PC). I've used the cursors in other apps I have, so I know it's not a hardware issue. Is there something I'm doing wrong here?

Thanks

Mike


Loofadawg(Posted 2013) [#3]
I have a Nexus 10 / USB Keyboard / and USB adapter. If you post some code I will try and see if I have the same problem.


necky(Posted 2013) [#4]
Thanks Loofdawg :)

I've been looking into a Java solution, but my Java skillz are extremely rusty/limited and I'm really struggling with it. It seems that using 'KeyEvent' is the key possibly, but creating a workable class to work with that is beyond my knowledge right now.

Here's my example code. When I hit a key, you get a value and the words 'backspace' for when the backspace key is hit (a simple check to see if my key entry code was working) It should also print up 'Cursor Left' and 'Cursor Right' to if the left and right cursors are hit. But, on my tablet I get nothing. Any help would be muchly appriciated!

Thanks

Mike

Import mojo

Class MyApp Extends App

    Field text$="Type something:"
    Field ascii:Int
    Field cursorL:Int
    Field cursorR:Int
    Field backspace:Int
    
    Method OnCreate()
    	EnableKeyboard
        SetUpdateRate 30
    End
    
    Method OnUpdate()
               
        Repeat
        	cursorL    = 0
        	cursorR    = 0
        	backspace  = 9
        	
     	    Local char=GetChar()
     	   	Local asc:Int
     	   	asc = char
            If Not char Exit
            If char>=32
                text+=String.FromChar( char )
                ascii = char
                Print ascii
            Endif
            
            Select asc
           		 Case KEY_LEFT
           		 	cursorL = 1
           		 	text+="<Cursor Right>"
           		 Exit
           		 
                 Case KEY_RIGHT
           		 	cursorR = 1
           		 	text+="<Cursor Left>"
           		 Exit      
           		 
           		 Case 8		' Backspace
           		 	backspace = 1  
           		 	text+="<backspace>"		 
           		 Exit 
            End
            
        Forever
    End
    
    Method OnRender()
        Cls
        
        If cursorL = 1
			DrawText "LEFT CURSOR",0,100
		Endif
		
        If cursorR = 1
			DrawText "RIGHT CURSOR",0,140
		Endif
		
	    If backspace = 1
			DrawText "BACKSPACE",0,140
		Endif
		
        DrawText text,0,0
        DrawText ascii,0,40
    End
End

Function Main()
    New MyApp
End



necky(Posted 2013) [#5]
This piece of Java code looks like it would give you keyboard feedback with the cursors. But I have no idea how to get this working in Monkey :/ Any pointers/tutorials would be ace!

thanks
Mike

public void onKey(KeyEvent keyEvent)
{
    if (keyEvent.type == KeyEvent.TypeDown)
    {
    if (keyEvent.key == KeyCodes.Left) 
        {
            if (getSliderPosition() > 0)
            {
                // move the slider left and mark the event as handled.
                moveSlider(-1);

                // Mark the event as handled.
                keyEvent.stop = True;
            }
        }
        if (keyEvent.key == KeyCodes.Right) 
            {
            if (getSliderPosition() < MAX_SLIDER_POSITION)
            {
                // move the slider right and mark the event as handled.
                moveSlider(1);
                keyEvent.stop = true;
            }
        }
    }
}


Taken from here:

http://developer.particlecode.com/index.jsp?topic=/com.particlecode.infocenter/help/html/bn1041593.html


AdamRedwoods(Posted 2013) [#6]
KeyEvent is enabled in monkey mojo, so you shouldn't have to add anything.
Does the command GetChar() return anything?

My other thought is that monkey may be grabbing the cursor keys in place of a gamepad, so you may be able to read JoyDown(joy_num) and it may show up.


necky(Posted 2013) [#7]
Hi Adam!
At present the GetChar doesn't even register the cursor keys have been pushed. I'm wondering if the keycodes on my Tablet are different for some reason. I'll take a look at the JoyDown option, that sounds promising :)

I'm determined to get to the bottom of it as it's something I'll need in my editor I'm writing :)

Thanks

Mike


necky(Posted 2013) [#8]
Well, I've done some more research and I've realised that when I push the '@' key it acts like the cursor left. For some reason its keycode is 39 on my keyboard. The plot thickens! Is anyone else finding this?(You can do the test by compiling my code above) If so there's possibly a bug report, if not, it must be something to do with my tablet setup.

Thanks

Mike


necky(Posted 2013) [#9]
Well, the digging goes on. It seems that 'hard keyboards' can have different keycodes, which is nice and sensible (note the sarcasm in my voice)

I found this post that shed some light on the problem:

http://www.mobileread.com/forums/showthread.php?t=159538

I'll try out the small app tonight that gives you feedback on the keycodes used and get to the bottom of what's going on.

It looks also as if all the information relating to the correct keycodes can be found in this file on your Android device, 'qwerty.kl'. You can edit it, but I'd be VERY careful if you want to, do a back up first as they warn you it can mess up you device, even to the point of it not turning on, you have been warned.

I'll keep you posted(even if no one replies as this could be a very helpful post for anyone with the same issue I'm having)

Thanks

Mike


necky(Posted 2013) [#10]
Below is a list of my Android keycodes (taken from the generic.kl file). The cursor keys keycods (called DPad) are these:

key 103 DPAD_UP
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 108 DPAD_DOWN

Even forcing a check for these key codes (if keydown(103)= true etc.) nothing happens. I think there may actually be a bug in the latest version of Monkeycoder. The small keycode checker app, as noted above, records the key hits, it's only my Monkeycoder App that isn't registering it right now.

Can someone please check my code above if they have an external keyboard plugged into an Android device (preferably a tablet) with cursor keys and let me know if they work, then we'll know for sure (maybe your goodself Mark :))

Thanks

Mike

key 1 ESCAPE
key 2 1
key 3 2
key 4 3
key 5 4
key 6 5
key 7 6
key 8 7
key 9 8
key 10 9
key 11 0
key 12 MINUS
key 13 EQUALS
key 14 DEL
key 15 TAB
key 16 Q
key 17 W
key 18 E
key 19 R
key 20 T
key 21 Y
key 22 U
key 23 I
key 24 O
key 25 P
key 26 LEFT_BRACKET
key 27 RIGHT_BRACKET
key 28 ENTER
key 29 CTRL_LEFT
key 30 A
key 31 S
key 32 D
key 33 F
key 34 G
key 35 H
key 36 J
key 37 K
key 38 L
key 39 SEMICOLON
key 40 APOSTROPHE
key 41 GRAVE
key 42 SHIFT_LEFT
key 43 BACKSLASH
key 44 Z
key 45 X
key 46 C
key 47 V
key 48 B
key 49 N
key 50 M
key 51 COMMA
key 52 PERIOD
key 53 SLASH
key 54 SHIFT_RIGHT
key 55 NUMPAD_MULTIPLY
key 56 ALT_LEFT
key 57 SPACE
key 58 CAPS_LOCK
key 59 F1
key 60 F2
key 61 F3
key 62 F4
key 63 F5
key 64 F6
key 65 F7
key 66 F8
key 67 F9
key 68 F10
key 69 NUM_LOCK
key 70 SCROLL_LOCK
key 71 NUMPAD_7
key 72 NUMPAD_8
key 73 NUMPAD_9
key 74 NUMPAD_SUBTRACT
key 75 NUMPAD_4
key 76 NUMPAD_5
key 77 NUMPAD_6
key 78 NUMPAD_ADD
key 79 NUMPAD_1
key 80 NUMPAD_2
key 81 NUMPAD_3
key 82 NUMPAD_0
key 83 NUMPAD_DOT
# key 84 (undefined)
key 85 ZENKAKU_HANKAKU
key 86 BACKSLASH
key 87 F11
key 88 F12
key 89 RO
# key 90 "KEY_KATAKANA"
# key 91 "KEY_HIRAGANA"
key 92 HENKAN
key 93 KATAKANA_HIRAGANA
key 94 MUHENKAN
key 95 NUMPAD_COMMA
key 96 NUMPAD_ENTER
key 97 CTRL_RIGHT
key 98 NUMPAD_DIVIDE
key 99 SYSRQ
key 100 ALT_RIGHT
# key 101 "KEY_LINEFEED"
key 102 MOVE_HOME
key 103 DPAD_UP
key 104 PAGE_UP
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 107 MOVE_END
key 108 DPAD_DOWN
key 109 PAGE_DOWN
key 110 INSERT
key 111 FORWARD_DEL
# key 112 "KEY_MACRO"
key 113 VOLUME_MUTE
key 114 VOLUME_DOWN
key 115 VOLUME_UP
key 116 POWER WAKE
key 117 NUMPAD_EQUALS
# key 118 "KEY_KPPLUSMINUS"
key 119 BREAK
# key 120 (undefined)
key 121 NUMPAD_COMMA
key 122 LANG
key 123 EISU
key 124 YEN
key 125 META_LEFT
key 126 META_RIGHT
key 127 MENU WAKE_DROPPED
key 128 MEDIA_STOP
# key 129 "KEY_AGAIN"
# key 130 "KEY_PROPS"
# key 131 "KEY_UNDO"
# key 132 "KEY_FRONT"
# key 133 "KEY_COPY"
# key 134 "KEY_OPEN"
# key 135 "KEY_PASTE"
# key 136 "KEY_FIND"
# key 137 "KEY_CUT"
# key 138 "KEY_HELP"
key 139 MENU WAKE_DROPPED
key 140 CALCULATOR
# key 141 "KEY_SETUP"
key 142 POWER WAKE
key 143 POWER WAKE
# key 144 "KEY_FILE"
# key 145 "KEY_SENDFILE"
# key 146 "KEY_DELETEFILE"
# key 147 "KEY_XFER"
# key 148 "KEY_PROG1"
# key 149 "KEY_PROG2"
key 150 EXPLORER
# key 151 "KEY_MSDOS"
key 152 POWER WAKE
# key 153 "KEY_DIRECTION"
# key 154 "KEY_CYCLEWINDOWS"
key 155 ENVELOPE
key 156 BOOKMARK
# key 157 "KEY_COMPUTER"
key 158 BACK WAKE_DROPPED
key 159 FORWARD
key 160 MEDIA_CLOSE
key 161 MEDIA_EJECT
key 162 MEDIA_EJECT
key 163 MEDIA_NEXT
key 164 MEDIA_PLAY_PAUSE
key 165 MEDIA_PREVIOUS
key 166 MEDIA_STOP
key 167 MEDIA_RECORD
key 168 MEDIA_REWIND
key 169 CALL
# key 170 "KEY_ISO"
key 171 MUSIC
key 172 HOME
# key 173 "KEY_REFRESH"
# key 174 "KEY_EXIT"
# key 175 "KEY_MOVE"
# key 176 "KEY_EDIT"
key 177 PAGE_UP
key 178 PAGE_DOWN
key 179 NUMPAD_LEFT_PAREN
key 180 NUMPAD_RIGHT_PAREN
# key 181 "KEY_NEW"
# key 182 "KEY_REDO"
# key 183 F13
# key 184 F14
# key 185 F15
# key 186 F16
# key 187 F17
# key 188 F18
# key 189 F19
# key 190 F20
# key 191 F21
# key 192 F22
# key 193 F23
# key 194 F24
# key 195 (undefined)
# key 196 (undefined)
# key 197 (undefined)
# key 198 (undefined)
# key 199 (undefined)
key 200 MEDIA_PLAY
key 201 MEDIA_PAUSE
# key 202 "KEY_PROG3"
# key 203 "KEY_PROG4"
# key 204 (undefined)
# key 205 "KEY_SUSPEND"
# key 206 "KEY_CLOSE"
key 207 MEDIA_PLAY
key 208 MEDIA_FAST_FORWARD
# key 209 "KEY_BASSBOOST"
# key 210 "KEY_PRINT"
# key 211 "KEY_HP"
key 212 CAMERA
key 213 MUSIC
# key 214 "KEY_QUESTION"
key 215 ENVELOPE
# key 216 "KEY_CHAT"
key 217 SEARCH
# key 218 "KEY_CONNECT"
# key 219 "KEY_FINANCE"
# key 220 "KEY_SPORT"
# key 221 "KEY_SHOP"
# key 222 "KEY_ALTERASE"
# key 223 "KEY_CANCEL"
key 224 BRIGHTNESS_DOWN
key 225 BRIGHTNESS_UP
key 226 HEADSETHOOK

key 256 BUTTON_1
key 257 BUTTON_2
key 258 BUTTON_3
key 259 BUTTON_4
key 260 BUTTON_5
key 261 BUTTON_6
key 262 BUTTON_7
key 263 BUTTON_8
key 264 BUTTON_9
key 265 BUTTON_10
key 266 BUTTON_11
key 267 BUTTON_12
key 268 BUTTON_13
key 269 BUTTON_14
key 270 BUTTON_15
key 271 BUTTON_16

key 288 BUTTON_1
key 289 BUTTON_2
key 290 BUTTON_3
key 291 BUTTON_4
key 292 BUTTON_5
key 293 BUTTON_6
key 294 BUTTON_7
key 295 BUTTON_8
key 296 BUTTON_9
key 297 BUTTON_10
key 298 BUTTON_11
key 299 BUTTON_12
key 300 BUTTON_13
key 301 BUTTON_14
key 302 BUTTON_15
key 303 BUTTON_16


key 304 BUTTON_A
key 305 BUTTON_B
key 306 BUTTON_C
key 307 BUTTON_X
key 308 BUTTON_Y
key 309 BUTTON_Z
key 310 BUTTON_L1
key 311 BUTTON_R1
key 312 BUTTON_L2
key 313 BUTTON_R2
key 314 BUTTON_SELECT
key 315 BUTTON_START
key 316 BUTTON_MODE
key 317 BUTTON_THUMBL
key 318 BUTTON_THUMBR


# key 352 "KEY_OK"
# key 353 DPAD_CENTER
# key 354 "KEY_GOTO"
# key 355 "KEY_CLEAR"
# key 356 "KEY_POWER2"
# key 357 "KEY_OPTION"
# key 358 "KEY_INFO"
# key 359 "KEY_TIME"
# key 360 "KEY_VENDOR"
# key 361 "KEY_ARCHIVE"
key 362 GUIDE
# key 363 "KEY_CHANNEL"
# key 364 "KEY_FAVORITES"
# key 365 "KEY_EPG"
key 366 DVR
# key 367 "KEY_MHP"
# key 368 "KEY_LANGUAGE"
# key 369 "KEY_TITLE"
# key 370 "KEY_SUBTITLE"
# key 371 "KEY_ANGLE"
# key 372 "KEY_ZOOM"
# key 373 "KEY_MODE"
# key 374 "KEY_KEYBOARD"
# key 375 "KEY_SCREEN"
# key 376 "KEY_PC"
key 377 TV
# key 378 "KEY_TV2"
# key 379 "KEY_VCR"
# key 380 "KEY_VCR2"
# key 381 "KEY_SAT"
# key 382 "KEY_SAT2"
# key 383 "KEY_CD"
# key 384 "KEY_TAPE"
# key 385 "KEY_RADIO"
# key 386 "KEY_TUNER"
# key 387 "KEY_PLAYER"
# key 388 "KEY_TEXT"
# key 389 "KEY_DVD"
# key 390 "KEY_AUX"
# key 391 "KEY_MP3"
# key 392 "KEY_AUDIO"
# key 393 "KEY_VIDEO"
# key 394 "KEY_DIRECTORY"
# key 395 "KEY_LIST"
# key 396 "KEY_MEMO"
key 397 CALENDAR
# key 398 "KEY_RED"
# key 399 "KEY_GREEN"
# key 400 "KEY_YELLOW"
# key 401 "KEY_BLUE"
key 402 CHANNEL_UP
key 403 CHANNEL_DOWN
# key 404 "KEY_FIRST"
# key 405 "KEY_LAST"
# key 406 "KEY_AB"
# key 407 "KEY_NEXT"
# key 408 "KEY_RESTART"
# key 409 "KEY_SLOW"
# key 410 "KEY_SHUFFLE"
# key 411 "KEY_BREAK"
# key 412 "KEY_PREVIOUS"
# key 413 "KEY_DIGITS"
# key 414 "KEY_TEEN"
# key 415 "KEY_TWEN"

key 429 CONTACTS

# key 448 "KEY_DEL_EOL"
# key 449 "KEY_DEL_EOS"
# key 450 "KEY_INS_LINE"
# key 451 "KEY_DEL_LINE"


key 464 FUNCTION
key 465 ESCAPE FUNCTION
key 466 F1 FUNCTION
key 467 F2 FUNCTION
key 468 F3 FUNCTION
key 469 F4 FUNCTION
key 470 F5 FUNCTION
key 471 F6 FUNCTION
key 472 F7 FUNCTION
key 473 F8 FUNCTION
key 474 F9 FUNCTION
key 475 F10 FUNCTION
key 476 F11 FUNCTION
key 477 F12 FUNCTION
key 478 1 FUNCTION
key 479 2 FUNCTION
key 480 D FUNCTION
key 481 E FUNCTION
key 482 F FUNCTION
key 483 S FUNCTION
key 484 B FUNCTION


# key 497 KEY_BRL_DOT1
# key 498 KEY_BRL_DOT2
# key 499 KEY_BRL_DOT3
# key 500 KEY_BRL_DOT4
# key 501 KEY_BRL_DOT5
# key 502 KEY_BRL_DOT6
# key 503 KEY_BRL_DOT7
# key 504 KEY_BRL_DOT8


# Joystick and game controller axes.
# Axes that are not mapped will be assigned generic axis numbers by the input subsystem.
axis 0x00 X
axis 0x01 Y
axis 0x02 Z
axis 0x03 RX
axis 0x04 RY
axis 0x05 RZ
axis 0x06 THROTTLE
axis 0x07 RUDDER
axis 0x08 WHEEL
axis 0x09 GAS
axis 0x0a BRAKE
axis 0x10 HAT_X
axis 0x11 HAT_Y


Loofadawg(Posted 2013) [#11]
Weird. The cursor keys work in non-monkey apps and home screen but apparently not in the monkey apps.

Also some of the constants from MOJO don't import or maybe I don't know what the heck I am doing.

Sorry I can't help but I am curious what the solution is.


Okay.. these post should help.

http://www.monkeycoder.co.nz/Community/posts.php?topic=1462#13375

http://www.monkeycoder.co.nz/Community/posts.php?topic=496#5130

The first link references the second. I remember commenting on it back then. I don't have time to mess with it but I bet you can get it working
by modifying the code posted there.


The following code works in HTML5 but obviously not in Android.




Import mojo

Class MyApp Extends App

	Field text$=""

              
    Method OnCreate()
    	SetUpdateRate 60
    End
    
    Method OnUpdate()
    
    	

        If KeyHit(37)
        	Print "Left"
        	text = "Left"
        End If
        
         If KeyHit(38)
        	Print "Up"
        	text = "Up"
        End If
        
         If KeyHit(39)
        	Print "Right"
        	text = "Right"
        End If
        
         If KeyHit(40)
        	Print "Down"
        	text = "Down"
        End If
        
       End
    
    Method OnRender()
        Cls
      DrawText "Last Cursor Key Hit",0,0
      DrawText text,16,16
    End
End

Function Main()
    New MyApp
End



necky(Posted 2013) [#12]
Thanks for the info above :) I'll take a look this evening :)

all the best!

Mike


necky(Posted 2013) [#13]
One of my friends has also tried the code above and he is getting the same results. The cursor keys are not responding at the moment. I think this is a Monkeycoder issue. I'll post it on the bugs forum.

Thanks :)

Mike


Loofadawg(Posted 2013) [#14]
Oh, sorry Mike.

I was just posting code that I was using to test with the keyboard. It wasn't meant to be a solution or anything of the sort.

I don't think it is a bug in Monkey, it is just that Monkey just doesn't so it.. yet.

But I hope a solution comes soon for you.