Skip to content
Permalink
Browse files

Android: send SDL_LOCALECHANGED when locale changes

  • Loading branch information
1bsyl committed May 8, 2020
1 parent 2a4ddee commit 2491f16f85e7e34f9cd0b55c2f39c255e35ba265
@@ -70,7 +70,7 @@
android:label="@string/app_name"
android:alwaysRetainTaskState="true"
android:launchMode="singleInstance"
android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -4,6 +4,7 @@
import java.io.InputStream;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Locale;
import java.lang.reflect.Method;
import java.lang.Math;

@@ -62,6 +63,7 @@
protected static final int SDL_ORIENTATION_PORTRAIT_FLIPPED = 4;

protected static int mCurrentOrientation;
protected static Locale mCurrentLocale;

// Handle the state of the native layer
public enum NativeState {
@@ -258,6 +260,15 @@ public void onClick(DialogInterface dialog,int id) {
// Only record current orientation
SDLActivity.onNativeOrientationChanged(mCurrentOrientation);

try {
if (Build.VERSION.SDK_INT < 24) {
mCurrentLocale = getContext().getResources().getConfiguration().locale;
} else {
mCurrentLocale = getContext().getResources().getConfiguration().getLocales().get(0);
}
} catch(Exception ignored) {
}

setContentView(mLayout);

setWindowStyle(false);
@@ -407,6 +418,17 @@ public void onLowMemory() {
SDLActivity.nativeLowMemory();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.v(TAG, "onConfigurationChanged()");
super.onConfigurationChanged(newConfig);

if (!mCurrentLocale.equals(newConfig.locale)) {
mCurrentLocale = newConfig.locale;
SDLActivity.onNativeLocaleChanged();
}
}

@Override
protected void onDestroy() {
Log.v(TAG, "onDestroy()");
@@ -784,6 +806,7 @@ public static native void onNativeTouch(int touchDevId, int pointerFingerId,
public static native void onNativeOrientationChanged(int orientation);
public static native void nativeAddTouch(int touchId, String name);
public static native void nativePermissionResult(int requestCode, boolean result);
public static native void onNativeLocaleChanged();

/**
* This method is called by SDL using JNI.
@@ -127,6 +127,9 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeClipboardChanged)(
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeLowMemory)(
JNIEnv *env, jclass cls);

JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeLocaleChanged)(
JNIEnv *env, jclass cls);

JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSendQuit)(
JNIEnv *env, jclass cls);

@@ -180,6 +183,7 @@ static JNINativeMethod SDLActivity_tab[] = {
{ "onNativeAccel", "(FFF)V", SDL_JAVA_INTERFACE(onNativeAccel) },
{ "onNativeClipboardChanged", "()V", SDL_JAVA_INTERFACE(onNativeClipboardChanged) },
{ "nativeLowMemory", "()V", SDL_JAVA_INTERFACE(nativeLowMemory) },
{ "onNativeLocaleChanged", "()V", SDL_JAVA_INTERFACE(onNativeLocaleChanged) },
{ "nativeSendQuit", "()V", SDL_JAVA_INTERFACE(nativeSendQuit) },
{ "nativeQuit", "()V", SDL_JAVA_INTERFACE(nativeQuit) },
{ "nativePause", "()V", SDL_JAVA_INTERFACE(nativePause) },
@@ -1142,6 +1146,15 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeLowMemory)(
SDL_SendAppEvent(SDL_APP_LOWMEMORY);
}

/* Locale
* requires android:configChanges="layoutDirection|locale" in AndroidManifest.xml */
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeLocaleChanged)(
JNIEnv *env, jclass cls)
{
SDL_SendAppEvent(SDL_LOCALECHANGED);
}


/* Send Quit event to "SDLThread" thread */
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSendQuit)(
JNIEnv *env, jclass cls)
@@ -2859,6 +2872,9 @@ int Android_JNI_GetLocale(char *buf, size_t buflen)

SDL_assert(buflen > 6);

/* Need to re-create the asset manager if locale has changed (SDL_LOCALECHANGED) */
Internal_Android_Destroy_AssetManager();

if (asset_manager == NULL) {
Internal_Android_Create_AssetManager();
}

0 comments on commit 2491f16

Please sign in to comment.