上一节我们研究了两个基本的接口KeyguardScreen和KeyguardViewCallback ,分别是用来抽象锁屏窗口和锁屏的反馈处理的接口。
KeyguardScreen有很多的类实现了它,而KeyguardViewCallback是在一个KeyguardViewManager类中有个该接口的成员变量,用来存储变量以便使用。
KeyguardViewManager 类是怎么运作的呢?
public class KeyguardViewManager implements KeyguardWindowController {
private final static boolean DEBUG = false;
private static String TAG = "KeyguardViewManager";
private final Context mContext;
private final ViewManager mViewManager;
private final KeyguardViewCallback mCallback;
...
}
这个类继承了一个接口,KeyguardWindowController这个接口是用来抽象是否需要输入法的接口,对接不同的输入法由系统其他地方实现,锁屏只需要显示还是不显示
public interface KeyguardWindowController {
/**
* Control whether the window needs input -- that is if it has
* text fields and thus should allow input method interaction.
*/
void setNeedsInput(boolean needsInput);
}
有个成员叫做mCallback,先看看这个变量怎么处理的,由构造函数的参数传入,
然后处理在show函数里面,在show函数里面添加到视图管理器中
mKeyguardHost = new KeyguardViewHost(mContext, mCallback);
mViewManager.addView(mKeyguardHost, lp);
其中mKeyguardHost是一个内部的静态类的成员变量,在类里面调用keyguradDoneDrawing函数。
private static class KeyguardViewHost extends FrameLayout {
private final KeyguardViewCallback mCallback;
private KeyguardViewHost(Context context, KeyguardViewCallback callback) {
super(context);
mCallback = callback;
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
mCallback.keyguardDoneDrawing();
}
}