KeyguardMessageArea继承自TextView,是各个锁屏界面布局中都包含的一个view。
首先来说SecurityMessageDisplay接口
SecurityMessageDisplay.java文件中定义如下
public interface SecurityMessageDisplay {
public void setMessage(CharSequence msg, boolean important);
public void setMessage(int resId, boolean important);
public void setMessage(int resId, boolean important, Object... formatArgs);
public void setTimeout(int timeout_ms);
public void showBouncer(int animationDuration);
public void hideBouncer(int animationDuration);
}
它的唯一实现KeyguardMessageArea.Helper,这是个public static内部类;
public static class Helper implements SecurityMessageDisplay { KeyguardMessageArea mMessageArea;//唯一一个成员变量,指向当前的KeyguardMessageArea实例 //唯一的构造方法,这里必须传入一个KeyguardMessageArea变量 Helper(View v) { mMessageArea = (KeyguardMessageArea) v.findViewById(R.id.keyguard_message_area); if (mMessageArea == null) { throw new RuntimeException("Can't find keyguard_message_area in " + v.getClass()); } } //设置mMessage并调用securityMessageChanged方法去更新信息 public void setMessage(CharSequence msg, boolean important) { if (!TextUtils.isEmpty(msg) && important) { mMessageArea.mMessage = msg; mMessageArea.securityMessageChanged(); } } ...... //调用hideMessage并置mShowingBouncer为true public void showBouncer(int duration) { mMessageArea.hideMessage(duration, false); mMessageArea.mShowingBouncer = true; }
//调用showMessage并置mShowingBouncer为false public void hideBouncer(int duration) { mMessageArea.showMessage(duration); mMessageArea.mShowingBouncer = false; } //设置mTimeout public void setTimeout(int timeoutMs) { mMessageArea.mTimeout = timeoutMs; } }
这个KeyguardMessageArea.Helper比较简单,重点关注它的构造方法就可以,下面看哪里会使用这个静态内部类。待续......