Skip to content

Commit b4ed4b5

Browse files
thgcodeLibretroAdmin
authored andcommitted
Accessibility: add first Android version
1 parent 8b213d3 commit b4ed4b5

3 files changed

Lines changed: 49 additions & 2 deletions

File tree

frontend/drivers/platform_unix.c

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,6 +2092,10 @@ static void frontend_unix_init(void *data)
20922092
"getVolumePath", "(Ljava/lang/String;)Ljava/lang/String;");
20932093
GET_METHOD_ID(env, android_app->inputGrabMouse, class,
20942094
"inputGrabMouse", "(Z)V");
2095+
GET_METHOD_ID(env, android_app->isScreenReaderEnabled, class,
2096+
"isScreenReaderEnabled", "()Z");
2097+
GET_METHOD_ID(env, android_app->accessibilitySpeak, class,
2098+
"accessibilitySpeak", "(Ljava/lang/String;)V");
20952099

20962100
GET_OBJECT_CLASS(env, class, obj);
20972101
GET_METHOD_ID(env, android_app->getStringExtra, class,
@@ -2961,6 +2965,33 @@ static bool accessibility_speak_unix(int speed,
29612965
}
29622966
#endif
29632967

2968+
#ifdef ANDROID
2969+
static bool is_narrator_running_android(void)
2970+
{
2971+
JNIEnv *env = jni_thread_getenv();
2972+
jboolean jbool = JNI_FALSE;
2973+
2974+
if (env != NULL)
2975+
CALL_BOOLEAN_METHOD(env, jbool,
2976+
g_android->activity->clazz, g_android->isScreenReaderEnabled);
2977+
2978+
return jbool == JNI_TRUE;
2979+
}
2980+
2981+
static bool accessibility_speak_android(int speed,
2982+
const char* speak_text, int priority)
2983+
{
2984+
JNIEnv *env = jni_thread_getenv();
2985+
2986+
if (env != NULL)
2987+
CALL_VOID_METHOD_PARAM(env, g_android->activity->clazz,
2988+
g_android->accessibilitySpeak,
2989+
(*env)->NewStringUTF(env, speak_text));
2990+
2991+
return true;
2992+
}
2993+
#endif
2994+
29642995
frontend_ctx_driver_t frontend_ctx_unix = {
29652996
frontend_unix_get_env, /* get_env */
29662997
frontend_unix_init, /* init */
@@ -3018,8 +3049,8 @@ frontend_ctx_driver_t frontend_ctx_unix = {
30183049
is_narrator_running_unix, /* is_narrator_running */
30193050
accessibility_speak_unix, /* accessibility_speak */
30203051
#else
3021-
NULL, /* is_narrator_running */
3022-
NULL, /* accessibility_speak */
3052+
is_narrator_running_android, /* is_narrator_running */
3053+
accessibility_speak_android, /* accessibility_speak */
30233054
#endif
30243055
#ifdef FERAL_GAMEMODE
30253056
frontend_unix_set_gamemode,

frontend/drivers/platform_unix.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ struct android_app
180180
jmethodID getVolumePath;
181181
jmethodID inputGrabMouse;
182182

183+
jmethodID isScreenReaderEnabled;
184+
jmethodID accessibilitySpeak;
185+
183186
struct
184187
{
185188
unsigned width, height;

pkg/android/phoenix-common/src/com/retroarch/browser/retroactivity/RetroActivityCommon.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.os.storage.StorageManager;
1818
import android.os.storage.StorageVolume;
1919
import android.system.Os;
20+
import android.view.accessibility.AccessibilityManager;
2021
import android.view.HapticFeedbackConstants;
2122
import android.view.InputDevice;
2223
import android.view.Surface;
@@ -608,4 +609,16 @@ private void traverseFilesystem(File file) {
608609
}
609610
}
610611
}
612+
613+
public boolean isScreenReaderEnabled() {
614+
getWindow().getDecorView().announceForAccessibility("Hello world!");
615+
AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
616+
boolean isAccessibilityEnabled = accessibilityManager.isEnabled();
617+
boolean isExploreByTouchEnabled = accessibilityManager.isTouchExplorationEnabled();
618+
return isAccessibilityEnabled && isExploreByTouchEnabled;
619+
}
620+
621+
public void accessibilitySpeak(String message) {
622+
getWindow().getDecorView().announceForAccessibility(message);
623+
}
611624
}

0 commit comments

Comments
 (0)