@@ -9,25 +9,37 @@ ALLEGRO_DEBUG_CHANNEL("android")
9
9
typedef struct ALLEGRO_JOYSTICK_ANDROID {
10
10
ALLEGRO_JOYSTICK parent ;
11
11
ALLEGRO_JOYSTICK_STATE joystate ;
12
- const char * name ;
12
+ char name [ 64 ] ;
13
13
} ALLEGRO_JOYSTICK_ANDROID ;
14
14
15
15
static _AL_VECTOR joysticks = _AL_VECTOR_INITIALIZER (ALLEGRO_JOYSTICK_ANDROID * );
16
16
static bool initialized ;
17
17
18
+ static char * android_get_joystick_name (JNIEnv * env , jobject activity , int index , char * buffer , size_t buffer_size )
19
+ {
20
+ jobject str_obj = _jni_callObjectMethodV (env , activity , "getJoystickName" , "(I)Ljava/lang/String;" , (jint )index );
21
+ ALLEGRO_USTR * s = _jni_getString (env , str_obj );
22
+ _al_sane_strncpy (buffer , al_cstr (s ), buffer_size );
23
+ al_ustr_free (s );
24
+
25
+ return buffer ;
26
+ }
27
+
18
28
static void android_init_joysticks (int num )
19
29
{
20
30
int i , j ;
31
+ JNIEnv * env = _al_android_get_jnienv ();
32
+ jobject activity = _al_android_activity_object ();
21
33
22
34
for (i = 0 ; i < num ; i ++ ) {
23
35
ALLEGRO_JOYSTICK_ANDROID * stick = al_calloc (1 , sizeof (ALLEGRO_JOYSTICK_ANDROID ));
24
36
ALLEGRO_JOYSTICK_ANDROID * * ptr ;
25
37
ALLEGRO_JOYSTICK * joy ;
26
38
27
39
joy = (void * )stick ;
28
- stick -> name = "Android Joystick" ;
29
40
30
41
/* Fill in the joystick information fields. */
42
+ android_get_joystick_name (env , activity , i , stick -> name , sizeof (stick -> name ));
31
43
joy -> info .num_sticks = 2 ;
32
44
joy -> info .num_buttons = 11 ;
33
45
joy -> info .stick [0 ].name = "Stick 1" ;
@@ -57,11 +69,10 @@ static bool andjoy_init_joystick(void)
57
69
ALLEGRO_JOYSTICK * joy ;
58
70
int num ;
59
71
60
- accel -> name = "Accelerometer" ;
61
-
62
72
joy = (void * )accel ;
63
73
64
74
/* Fill in the joystick information fields. */
75
+ _al_sane_strncpy (accel -> name , "Accelerometer" , sizeof (accel -> name ));
65
76
joy -> info .num_sticks = 1 ;
66
77
joy -> info .num_buttons = 0 ;
67
78
joy -> info .stick [0 ].name = "Accelerometer" ;
0 commit comments