fwk 中 ime



/frameworks/base/core/java/android.inputmethodservice/InputMethodService
输入法内部逻辑,键盘布局,选词等,最终把选出的字符通过commitText提交出来

InputMethodManager
由UI控件(View,TextView,EditText等)调用,用来操作输入法;比如,打开,关闭,切换输入法等

首先,InputMethodManagerService在初始化时,会调用IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)),得到IWindowManager这个代理,然后通过IWindowManager与WindowManagerService交互

InputMethodManager中会包含一个IInputMethodManager,这个东西就是InputMethodManagerService的代理,打开关闭输入法这些操作就是由InputMethodManager中的某些方法调用IInputMethodManager中相应的方法来实现的



只有激活的InputConnection接受操作。IMF通知每个客户进程是否激活,IMF忽略非激活进程对当前输入联接的调用。这确保了当前IME只将事件和文本编辑交付用户可见焦点的UI


IInputMethodCallback.aidl定义了一个helper 接口,由客户端实现。IInputMethod.aidl和IInputMethodSession.aidl实例可以分别调用该接口中的不同方法

InputConnection.java定义了InputConnection interface。InputConnection 接口在输入法和客户端之间建立了一个连接,输入法可以使用该连接获取或发送信息给客户端。InputConnection实例由客户端创建之后传递给输入法使用。BaseInputConnection.java 实现了InputConnection接口的一个基类: BaseInputConnection。 EditableInputConnection.java实现了一个派生类


InputBinding.java 定义了类InputBinding,这个类实现了parcelable 接口。这个类的成员变量包含了客户端传向server的信息

CompletionInfo.java 类描述一个text completion.
EditorInfo.java类描述一个接收输入的view的属性,如内容属性(text, digit, etc)。
ExtractedText.java类描述从view中提取的传递给输入法的文本属性

AbstractInputMethodService是Service的派生类,并实现了KeyEvent.Callback 接口。实现了InputMethod 和 InputMethodSession的基类。dispatchKeyEvent 函数将收到的key event传给相应的key 处理函数(在派生类中实现)。当这个service被客户端绑定时,其onBind()函数给客户端返回了一个IInputMethodWrapper实例,这个实例实现了IInputMethod idl接口。客户端可以使用该接口的相关功能。

IInputMethodWrapper.java 实现了IInputMethod idl 接口。这个类收到客户端的跨进程命令后,调用InputMethod完成相应功能。
IInputMethodSessionWrapper.java 实现了IInputMethodSession idl接口。这个类收到客户端的跨进程命令后,调用InputMethodSession完成相应功能。


pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base$ grep -r "IInputMethod.Stub" ./
./core/java/android/inputmethodservice/IInputMethodWrapper.java:class IInputMethodWrapper extends IInputMethod.Stub
./services/java/com/android/server/InputMethodManagerService.java:                mCurMethod = IInputMethod.Stub.asInterface(service);

pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base$ grep -r "IInputMethodSession.Stub" ./
./core/java/android/inputmethodservice/IInputMethodSessionWrapper.java:class IInputMethodSessionWrapper extends IInputMethodSession.Stub
./core/java/com/android/internal/view/InputBindResult.java:        method = IInputMethodSession.Stub.asInterface(source.readStrongBinder());

pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base/services/java$ grep -r "IInputMethodManager.Stub" ./
./com/android/server/wm/Session.java:                mService.mInputMethodManager = IInputMethodManager.Stub.asInterface(b);
./com/android/server/InputMethodManagerService.java:public class InputMethodManagerService extends IInputMethodManager.Stub


pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base/services/java$ grep -r "IInputMethodCallback.Stub" ./
./com/android/server/InputMethodManagerService.java:    private static class MethodCallback extends IInputMethodCallback.Stub {
pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base/services/java$ 

pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base/core/java/android$ grep -r "IInputMethodClient.Stub" ./
./view/inputmethod/InputMethodManager.java:    final IInputMethodClient.Stub mClient = new IInputMethodClient.Stub() {

pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base$ grep -r "IInputContext.Stub" ./
./core/java/android/inputmethodservice/IInputMethodWrapper.java:                IInputContext.Stub.asInterface(binding.getConnectionToken()));
./core/java/com/android/internal/view/IInputConnectionWrapper.java:public class IInputConnectionWrapper extends IInputContext.Stub {

pateo@pateo-B86N53X:/work/project/a1001eh/frameworks/base$ grep -r "IInputContextCallback.Stub" ./
./core/java/com/android/internal/view/InputConnectionWrapper.java:    static class InputContextCallback extends IInputContextCallback.Stub {

public class InputMethodService extends AbstractInputMethodService 类中  public class InputMethodImpl extends AbstractInputMethodImpl {
public abstract class AbstractInputMethodService 类中 :public abstract class AbstractInputMethodImpl implements InputMethod {


InputMethodManager 通过 InputMethodManagerService的本地代理访问InputMethodManagerService
InputMethodManagerService 通过 IInputMethodWrapper(mCurMethod)  回调InputMethodService
InputMethodManager  通过 IInputMethodSession访问InputMethodService  

InputMethodManagerService通过 IInputMethodClient 回调InputMethodManager  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值