api-impl: add ATLKeyboardViewer to support launching IMEs

This commit is contained in:
Mis012 2025-03-28 19:51:23 +01:00
parent bb7eb461c8
commit bce91cc527
19 changed files with 792 additions and 8 deletions

View file

@ -0,0 +1,77 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class android_inputmethodservice_InputMethodService_ATLInputConnection */
#ifndef _Included_android_inputmethodservice_InputMethodService_ATLInputConnection
#define _Included_android_inputmethodservice_InputMethodService_ATLInputConnection
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeInit
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeInit
(JNIEnv *, jobject);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeSetCompositingText
* Signature: (JLjava/lang/String;I)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeSetCompositingText
(JNIEnv *, jobject, jlong, jstring, jint);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeSetCompositingRegion
* Signature: (JII)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeSetCompositingRegion
(JNIEnv *, jobject, jlong, jint, jint);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeFinishComposingText
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeFinishComposingText
(JNIEnv *, jobject, jlong);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeCommitText
* Signature: (JLjava/lang/String;I)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeCommitText
(JNIEnv *, jobject, jlong, jstring, jint);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeDeleteSurroundingText
* Signature: (JII)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeDeleteSurroundingText
(JNIEnv *, jobject, jlong, jint, jint);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeSetSelection
* Signature: (JII)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeSetSelection
(JNIEnv *, jobject, jlong, jint, jint);
/*
* Class: android_inputmethodservice_InputMethodService_ATLInputConnection
* Method: nativeSendKeyEvent
* Signature: (JJJJ)Z
*/
JNIEXPORT jboolean JNICALL Java_android_inputmethodservice_InputMethodService_00024ATLInputConnection_nativeSendKeyEvent
(JNIEnv *, jobject, jlong, jlong, jlong, jlong);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -453,6 +453,14 @@ JNIEXPORT void JNICALL Java_android_view_MotionEvent_nativeGetPointerProperties
JNIEXPORT void JNICALL Java_android_view_MotionEvent_nativeScale JNIEXPORT void JNICALL Java_android_view_MotionEvent_nativeScale
(JNIEnv *, jclass, jint, jfloat); (JNIEnv *, jclass, jint, jfloat);
/*
* Class: android_view_MotionEvent
* Method: nativeTransform
* Signature: (ILandroid/graphics/Matrix;)V
*/
JNIEXPORT void JNICALL Java_android_view_MotionEvent_nativeTransform
(JNIEnv *, jclass, jint, jobject);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -7,6 +7,11 @@ import android.os.IBinder;
public abstract class Service extends ContextWrapper { public abstract class Service extends ContextWrapper {
/* HACK for InputMethodService */
public Service(Context baseContext) {
super(baseContext);
}
public Service() { public Service() {
super(null); super(null);
} }

View file

@ -0,0 +1,34 @@
package android.inputmethodservice;
import android.app.Activity;
import android.os.Bundle;
import java.lang.reflect.Constructor;
public class ATLKeyboardViewer extends Activity {
@Override
public void onCreate(Bundle savedState) {
Bundle extras = this.getIntent().getExtras();
if (extras == null || !extras.containsKey("kb_class")) {
System.err.println("ATLKeyboardViewer: usage: `-e 'kb_class=com.example.LatinIME'`");
System.exit(1);
}
String kb_class = extras.getString("kb_class");
InputMethodService ims = null;
try {
Class<? extends InputMethodService> cls = Class.forName(kb_class).asSubclass(InputMethodService.class);
Constructor<? extends InputMethodService> constructor = cls.getConstructor();
ims = constructor.newInstance();
} catch (ReflectiveOperationException e) {
System.err.println("ATLKeyboardViewer: failed to instantiate InputMethodService (kb_class: "+kb_class+")");
e.printStackTrace();
System.exit(1);
}
ims.launch_keyboard();
}
}

View file

@ -0,0 +1,16 @@
package android.inputmethodservice;
import android.app.Service;
import android.content.Context;
import android.view.inputmethod.InputMethod;
public abstract class AbstractInputMethodService extends Service {
public AbstractInputMethodService(Context context) {
super(context);
}
public abstract class AbstractInputMethodImpl implements InputMethod {
public void createSession(SessionCallback callback) {
}
}
}

View file

@ -0,0 +1,245 @@
package android.inputmethodservice;
import android.app.Dialog;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Region;
import android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl;
import android.os.IBinder;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.CorrectionInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputBinding;
import android.view.inputmethod.InputConnection;
import android.widget.LinearLayout;
public class InputMethodService extends AbstractInputMethodService {
private LinearLayout kb_box;
private View kb_view;
private View candidates_view;
private Dialog kb_dialog;
class ATLInputConnection extends BaseInputConnection {
ATLInputConnection() {
super(null, false);
}
@Override
public boolean setComposingText(CharSequence text, int newCursorPosition) {
System.out.println("softkeyboard preview: setComposingText(\""+text+"\", "+newCursorPosition+")");
return true;
}
@Override
public boolean finishComposingText() {
System.out.println("softkeyboard preview: finishComposingText()");
return true;
}
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
System.out.println("softkeyboard preview: commitText(\""+text+"\", "+newCursorPosition+")");
return true;
}
@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
System.out.println("softkeyboard preview: deleteSurroundingText("+beforeLength+", "+afterLength+")");
return true;
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
System.out.println("softkeyboard preview: sendKeyEvent("+event+")");
return true;
}
/* these functions are noop on AOSP by default, so we just add a print for debugging purposes and still return false */
@Override
public boolean commitCompletion(CompletionInfo completionInfo) {
System.out.println("softkeyboard preview: commitCompletion(\""+completionInfo+"\")");
return false;
}
@Override
public boolean commitCorrection(CorrectionInfo correctionInfo) {
System.out.println("softkeyboard preview: commitCorrection(\""+correctionInfo+"\")");
return false;
}
}
private InputConnection input_connection = new ATLInputConnection();
public InputMethodService() {
super(new Context());
}
public void launch_keyboard() {
kb_dialog = new Dialog(this);
View decorview = kb_dialog.getWindow().getDecorView();
decorview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
onCreate();
AbstractInputMethodImpl impl = onCreateInputMethodInterface();
impl.createSession(null);
// to force portrait version:
getResources().getConfiguration().orientation = Configuration.ORIENTATION_PORTRAIT;
onConfigurationChanged(getResources().getConfiguration());
onBindInput();
onStartInput(new EditorInfo(), false);
kb_box = new LinearLayout(this);
kb_box.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
kb_box.setOrientation(LinearLayout.VERTICAL);
candidates_view = onCreateCandidatesView();
kb_view = onCreateInputView();
if (candidates_view != null)
kb_box.addView(candidates_view);
kb_box.addView(kb_view);
kb_dialog.setContentView(kb_box);
kb_dialog.show();
onConfigureWindow(kb_dialog.getWindow(), false, false);
onComputeInsets(new Insets());
onStartInputView(new EditorInfo(), false);
}
public void sendKeyChar(char c) {
System.out.println("softkeyboard preview: sendKeyChar('"+c+"')");
}
public void setInputView(View view) {
kb_view = view;
}
public void setCandidatesView(View view) {
candidates_view = view;
}
public InputBinding getCurrentInputBinding() {
return new InputBinding(new ATLInputConnection(), null, 0, 0);
}
public IBinder onBind(Intent intent) {
return null;
}
public LayoutInflater getLayoutInflater() {
return (LayoutInflater)getSystemService("layout_inflater");
}
public boolean onEvaluateInputViewShown() {
return true;
}
public void setCandidatesViewShown(boolean shown) {
}
public void showStatusIcon(int resId) {
}
public void hideStatusIcon() {
}
public void updateInputViewShown() {
}
public void updateFullscreenMode() {
}
public boolean isFullscreenMode() {
return false;
}
public int getMaxWidth() {
return (kb_view != null && kb_view.getWidth() > 0) ? kb_view.getWidth() : Resources.getSystem().getDisplayMetrics().widthPixels;
}
public EditorInfo getCurrentInputEditorInfo() {
return new EditorInfo();
}
public void requestHideSelf(int flags) {
}
public Dialog getWindow() {
return kb_dialog;
}
public InputConnection getCurrentInputConnection() {
return input_connection;
}
/* --- */
public AbstractInputMethodImpl onCreateInputMethodInterface() {
return null;
}
public View onCreateCandidatesView() {
return null;
}
public View onCreateInputView() {
return null;
}
public void onConfigurationChanged(Configuration configuration) {
}
public void onConfigureWindow(Window win, boolean isFullscreen, boolean isCandidatesOnly) {
}
public void onComputeInsets(Insets insets) {
}
public void onStartInput(EditorInfo info, boolean restarting) {
}
public void onFinishInput() {
}
public void onStartInputView(EditorInfo info, boolean restarting) {
}
public void onBindInput() {
}
/* --- */
public static final class Insets {
public int contentTopInsets;
public int visibleTopInsets;
public final Region touchableRegion = new Region();
public static final int TOUCHABLE_INSETS_FRAME = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME;
public static final int TOUCHABLE_INSETS_CONTENT = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT;
public static final int TOUCHABLE_INSETS_VISIBLE = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE;
public static final int TOUCHABLE_INSETS_REGION = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION;
public int touchableInsets;
}
public class InputMethodImpl extends AbstractInputMethodImpl {
}
}

View file

@ -332,7 +332,8 @@ public class KeyCharacterMap {
* @return The associated character or combining accent, or 0 if none. * @return The associated character or combining accent, or 0 if none.
*/ */
public int get(int keyCode, int metaState) { public int get(int keyCode, int metaState) {
metaState = KeyEvent.normalizeMetaState(metaState); return 0;
/*metaState = KeyEvent.normalizeMetaState(metaState);
char ch = nativeGetCharacter(mPtr, keyCode, metaState); char ch = nativeGetCharacter(mPtr, keyCode, metaState);
int map = sCombiningToAccent.get(ch); int map = sCombiningToAccent.get(ch);
@ -340,7 +341,7 @@ public class KeyCharacterMap {
return map | COMBINING_ACCENT; return map | COMBINING_ACCENT;
} else { } else {
return ch; return ch;
} }*/
} }
/** /**

View file

@ -24,6 +24,7 @@ import android.text.Spannable;
import android.text.Spanned; import android.text.Spanned;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
class Editable {} class Editable {}

View file

@ -0,0 +1,5 @@
package android.view.inputmethod;
public final class CompletionInfo {
}

View file

@ -0,0 +1,104 @@
/*
* Copyright (C) 2007-2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package android.view.inputmethod;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
/**
* Information about a single text correction that an editor has reported to
* an input method.
*/
public final class CorrectionInfo implements Parcelable {
private final int mOffset;
private final CharSequence mOldText;
private final CharSequence mNewText;
/**
* @param offset The offset in the edited text where the old and new text start.
* @param oldText The old text that has been replaced.
* @param newText The replacement text.
*/
public CorrectionInfo(int offset, CharSequence oldText, CharSequence newText) {
mOffset = offset;
mOldText = oldText;
mNewText = newText;
}
private CorrectionInfo(Parcel source) {
mOffset = 0/*source.readInt()*/;
mOldText = null/*TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source)*/;
mNewText = null/*TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source)*/;
}
/**
* Return the offset position of this correction in the text. Both the {@link #getOldText()} and
* {@link #getNewText()} start at this offset.
*/
public int getOffset() {
return mOffset;
}
/**
* Return the text that has actually been typed by the user, and which has been corrected.
*/
public CharSequence getOldText() {
return mOldText;
}
/**
* Return the new text that corrects what was typed by the user.
*/
public CharSequence getNewText() {
return mNewText;
}
@Override
public String toString() {
return "CorrectionInfo{#" + mOffset + " \"" + mOldText + "\" -> \"" + mNewText + "\"}";
}
/**
* Used to package this object into a {@link Parcel}.
*
* @param dest The {@link Parcel} to be written.
* @param flags The flags used for parceling.
*/
public void writeToParcel(Parcel dest, int flags) {
/*dest.writeInt(mOffset);
TextUtils.writeToParcel(mOldText, dest, flags);
TextUtils.writeToParcel(mNewText, dest, flags);*/
}
/**
* Used to make this class parcelable.
*/
public static final @android.annotation.NonNull Parcelable.Creator<CorrectionInfo> CREATOR =
new Parcelable.Creator<CorrectionInfo>() {
public CorrectionInfo createFromParcel(Parcel source) {
return new CorrectionInfo(source);
}
public CorrectionInfo[] newArray(int size) {
return new CorrectionInfo[size];
}
};
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,20 @@
package android.view.inputmethod;
import android.os.Bundle;
public class EditorInfo {
public int actionId = 0;
public CharSequence actionLabel = null;
public Bundle extras = null;
public int fieldId = 0;
public String fieldName = null;
public CharSequence hintText = null;
public int imeOptions = 0x0;
public int initialCapsMode = 0;
public int initialSelStart = -1;
public int initialSelEnd = -1;
public int inputType = /*0x0*/ 0x00000001; /* TYPE_NULL */ /* TYPE_CLASS_TEXT */
public CharSequence label = null;
public String packageName = "com.example.FIXME";
public String privateImeOptions = null;
}

View file

@ -0,0 +1,85 @@
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.view.inputmethod;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Description of what an input method would like from an application when
* extract text from its input editor.
*/
public class ExtractedTextRequest implements Parcelable {
/**
* Arbitrary integer that can be supplied in the request, which will be
* delivered back when reporting updates.
*/
public int token;
/**
* Additional request flags, having the same possible values as the
* flags parameter of {@link InputConnection#getTextBeforeCursor
* InputConnection.getTextBeforeCursor()}.
*/
public int flags;
/**
* Hint for the maximum number of lines to return.
*/
public int hintMaxLines;
/**
* Hint for the maximum number of characters to return.
*/
public int hintMaxChars;
/**
* Used to package this object into a {@link Parcel}.
*
* @param dest The {@link Parcel} to be written.
* @param flags The flags used for parceling.
*/
public void writeToParcel(Parcel dest, int flags) {
/*dest.writeInt(token);
dest.writeInt(this.flags);
dest.writeInt(hintMaxLines);
dest.writeInt(hintMaxChars);*/
}
/**
* Used to make this class parcelable.
*/
public static final @android.annotation.NonNull Parcelable.Creator<ExtractedTextRequest> CREATOR = new Parcelable.Creator<ExtractedTextRequest>() {
public ExtractedTextRequest createFromParcel(Parcel source) {
/*ExtractedTextRequest res = new ExtractedTextRequest();
res.token = source.readInt();
res.flags = source.readInt();
res.hintMaxLines = source.readInt();
res.hintMaxChars = source.readInt();
return res;*/
return null;
}
public ExtractedTextRequest[] newArray(int size) {
return new ExtractedTextRequest[size];
}
};
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,151 @@
/*
* Copyright (C) 2007-2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package android.view.inputmethod;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Information given to an {@link InputMethod} about a client connecting
* to it.
*/
public final class InputBinding implements Parcelable {
static final String TAG = "InputBinding";
/**
* The connection back to the client.
*/
final InputConnection mConnection;
/**
* A remotable token for the connection back to the client.
*/
final IBinder mConnectionToken;
/**
* The UID where this binding came from.
*/
final int mUid;
/**
* The PID where this binding came from.
*/
final int mPid;
/**
* Constructor.
*
* @param conn The interface for communicating back with the application.
* @param connToken A remoteable token for communicating across processes.
* @param uid The user id of the client of this binding.
* @param pid The process id of where the binding came from.
*/
public InputBinding(InputConnection conn, IBinder connToken,
int uid, int pid) {
mConnection = conn;
mConnectionToken = connToken;
mUid = uid;
mPid = pid;
}
/**
* Constructor from an existing InputBinding taking a new local input
* connection interface.
*
* @param conn The new connection interface.
* @param binding Existing binding to copy.
*/
public InputBinding(InputConnection conn, InputBinding binding) {
mConnection = conn;
mConnectionToken = binding.getConnectionToken();
mUid = binding.getUid();
mPid = binding.getPid();
}
InputBinding(Parcel source) {
mConnection = null;
mConnectionToken = null; //source.readStrongBinder();
mUid = 0; //source.readInt();
mPid = 0; //source.readInt();
}
/**
* Return the connection for interacting back with the application.
*/
public InputConnection getConnection() {
return mConnection;
}
/**
* Return the token for the connection back to the application. You can
* not use this directly, it must be converted to a {@link InputConnection}
* for you.
*/
public IBinder getConnectionToken() {
return mConnectionToken;
}
/**
* Return the user id of the client associated with this binding.
*/
public int getUid() {
return mUid;
}
/**
* Return the process id where this binding came from.
*/
public int getPid() {
return mPid;
}
@Override
public String toString() {
return "InputBinding{" + mConnectionToken + " / uid " + mUid + " / pid " + mPid + "}";
}
/**
* Used to package this object into a {@link Parcel}.
*
* @param dest The {@link Parcel} to be written.
* @param flags The flags used for parceling.
*/
public void writeToParcel(Parcel dest, int flags) {
/*dest.writeStrongBinder(mConnectionToken);
dest.writeInt(mUid);
dest.writeInt(mPid);*/
}
/**
* Used to make this class parcelable.
*/
public static final @android.annotation.NonNull Parcelable.Creator<InputBinding> CREATOR = new Parcelable.Creator<InputBinding>() {
public InputBinding createFromParcel(Parcel source) {
return new InputBinding(source);
}
public InputBinding[] newArray(int size) {
return new InputBinding[size];
}
};
public int describeContents() {
return 0;
}
}

View file

@ -15,12 +15,9 @@
*/ */
package android.view.inputmethod; package android.view.inputmethod;
import android.os.Bundle; import android.os.Bundle;
import android.view.KeyEvent;
class ExtractedText {} class ExtractedText {}
class ExtractedTextRequest {}
class CompletionInfo {}
class CorrectionInfo {}
class KeyEvent {}
/** /**
* The InputConnection interface is the communication channel from an * The InputConnection interface is the communication channel from an

View file

@ -0,0 +1,7 @@
package android.view.inputmethod;
public interface InputMethod {
public interface SessionCallback {
public void sessionCreated(InputMethodSession session);
}
}

View file

@ -0,0 +1,5 @@
package android.view.inputmethod;
public final class InputMethodInfo {
}

View file

@ -1,5 +1,6 @@
package android.view.inputmethod; package android.view.inputmethod;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -8,6 +9,8 @@ import android.view.View;
public class InputMethodManager { public class InputMethodManager {
private ArrayList<InputMethodInfo> input_method_list = new ArrayList<InputMethodInfo>();
public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) {return false;} public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) {return false;}
public boolean showSoftInput(View view, int flags) {return false;} public boolean showSoftInput(View view, int flags) {return false;}
@ -16,8 +19,12 @@ public class InputMethodManager {
public boolean isActive(View view) {return false;} public boolean isActive(View view) {return false;}
public List/*<InputMethodInfo>*/ getEnabledInputMethodList() { public List<InputMethodInfo> getEnabledInputMethodList() {
return Collections.emptyList(); return input_method_list;
}
public List<InputMethodInfo> getInputMethodList() {
return input_method_list;
} }
public void restartInput(View view) {} public void restartInput(View view) {}

View file

@ -0,0 +1,5 @@
package android.view.inputmethod;
public interface InputMethodSession {
}

View file

@ -259,6 +259,9 @@ srcs = [
'android/hardware/display/DisplayManager.java', 'android/hardware/display/DisplayManager.java',
'android/hardware/input/InputManager.java', 'android/hardware/input/InputManager.java',
'android/hardware/usb/UsbManager.java', 'android/hardware/usb/UsbManager.java',
'android/inputmethodservice/AbstractInputMethodService.java',
'android/inputmethodservice/InputMethodService.java',
'android/inputmethodservice/ATLKeyboardViewer.java',
'android/location/Criteria.java', 'android/location/Criteria.java',
'android/location/GnssStatus.java', 'android/location/GnssStatus.java',
'android/location/Location.java', 'android/location/Location.java',
@ -540,9 +543,17 @@ srcs = [
'android/view/animation/TranslateAnimation.java', 'android/view/animation/TranslateAnimation.java',
'android/view/autofill/AutofillManager.java', 'android/view/autofill/AutofillManager.java',
'android/view/inputmethod/BaseInputConnection.java', 'android/view/inputmethod/BaseInputConnection.java',
'android/view/inputmethod/InputBinding.java',
'android/view/inputmethod/CompletionInfo.java',
'android/view/inputmethod/CorrectionInfo.java',
'android/view/inputmethod/CursorAnchorInfo.java', 'android/view/inputmethod/CursorAnchorInfo.java',
'android/view/inputmethod/EditorInfo.java',
'android/view/inputmethod/ExtractedTextRequest.java',
'android/view/inputmethod/InputConnection.java', 'android/view/inputmethod/InputConnection.java',
'android/view/inputmethod/InputMethod.java',
'android/view/inputmethod/InputMethodInfo.java',
'android/view/inputmethod/InputMethodManager.java', 'android/view/inputmethod/InputMethodManager.java',
'android/view/inputmethod/InputMethodSession.java',
'android/view/textservice/TextServicesManager.java', 'android/view/textservice/TextServicesManager.java',
'android/webkit/CookieManager.java', 'android/webkit/CookieManager.java',
'android/webkit/DownloadListener.java', 'android/webkit/DownloadListener.java',