Fixed bug #4843 - Can not get the ime candidatelist like chinese/japaness input method

main
Sylvain 2021-10-17 23:17:54 +02:00
parent 7fb4364391
commit ccb12457f9
No known key found for this signature in database
GPG Key ID: 5F87E02E5BC0939E
3 changed files with 40 additions and 1 deletions

View File

@ -102,6 +102,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
/** If shared libraries (e.g. SDL or the native application) could not be loaded. */
public static boolean mBrokenLibraries = true;
public static int mInputType = 1;
// Main components
protected static SDLActivity mSingleton;
protected static SDLSurface mSurface;
@ -1184,6 +1186,14 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
return event.isPrintingKey() || event.getKeyCode() == KeyEvent.KEYCODE_SPACE;
}
/**
* This method is called by SDL using JNI.
*/
public static int setInputType(int type) {
mInputType = type;
return 0;
}
/**
* This method is called by SDL using JNI.
*/
@ -2182,7 +2192,14 @@ class DummyEdit extends View implements View.OnKeyListener {
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
ic = new SDLInputConnection(this, true);
outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
if (SDLActivity.mInputType == 0) {
/* 0 normal: use input method */
outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
} else {
/* 1 password (default): can not use input methodjust use english */
outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
}
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI
| EditorInfo.IME_FLAG_NO_FULLSCREEN /* API 11 */;

View File

@ -395,6 +395,17 @@ extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permis
*/
extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset);
/* Set Android IME Input Type
* Call this method before calling SDL_StartTextInput()
*
* \param type
* 0 normal: use input method
* 1 password (default): can not use input methodjust use english
*
* \returns 0 if success, -1 if any error occurs.
*/
extern DECLSPEC int SDLCALL SDL_AndroidSetInputType(int type);
#endif /* __ANDROID__ */
/* Platform specific functions for WinRT */

View File

@ -316,6 +316,7 @@ static jmethodID midShowToast;
static jmethodID midSendMessage;
static jmethodID midSetActivityTitle;
static jmethodID midSetCustomCursor;
static jmethodID midSetInputType;
static jmethodID midSetOrientation;
static jmethodID midSetRelativeMouseEnabled;
static jmethodID midSetSystemCursor;
@ -595,6 +596,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv *env, jclass cl
midSendMessage = (*env)->GetStaticMethodID(env, mActivityClass, "sendMessage", "(II)Z");
midSetActivityTitle = (*env)->GetStaticMethodID(env, mActivityClass, "setActivityTitle","(Ljava/lang/String;)Z");
midSetCustomCursor = (*env)->GetStaticMethodID(env, mActivityClass, "setCustomCursor", "(I)Z");
midSetInputType = (*env)->GetStaticMethodID(env, mActivityClass, "setInputType", "(I)I");
midSetOrientation = (*env)->GetStaticMethodID(env, mActivityClass, "setOrientation","(IIZLjava/lang/String;)V");
midSetRelativeMouseEnabled = (*env)->GetStaticMethodID(env, mActivityClass, "setRelativeMouseEnabled", "(Z)Z");
midSetSystemCursor = (*env)->GetStaticMethodID(env, mActivityClass, "setSystemCursor", "(I)Z");
@ -625,6 +627,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv *env, jclass cl
!midSendMessage ||
!midSetActivityTitle ||
!midSetCustomCursor ||
!midSetInputType ||
!midSetOrientation ||
!midSetRelativeMouseEnabled ||
!midSetSystemCursor ||
@ -2453,6 +2456,14 @@ int SDL_AndroidShowToast(const char* message, int duration, int gravity, int xOf
return Android_JNI_ShowToast(message, duration, gravity, xOffset, yOffset);
}
int SDL_AndroidSetInputType(int type)
{
int result = 0;
JNIEnv *env = Android_JNI_GetEnv();
result = (*env)->CallStaticIntMethod(env, mActivityClass, midSetInputType, type);
return result;
}
void Android_JNI_GetManifestEnvironmentVariables(void)
{
if (!mActivityClass || !midGetManifestEnvironmentVariables) {