당연히 handheld 제품이라면 필요한 UI입니다.
제가 작업하는 android에는 필요없는 UI 컨셉인 관계로 부팅 후 바로 Home Screen이 나오도록 수정하여 보겠습니다.
framework/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 에서
public int finishAnimationLw() {
int changes = 0;
finishAnimationLw() 함수가 있습니다.
        // Hide the key guard if a visible window explicitly specifies that it wants to be displayed
        // when the screen is locked
        if (mKeyguard != null) {
            if (localLOGV) Log.v(TAG, "finishLayoutLw::mHideKeyguard="+mHideLockScreen);
                /*
                if (mDismissKeyguard && !mKeyguardMediator.isSecure()) {
                    if (mKeyguard.hideLw(true)) {
                        changes |= FINISH_LAYOUT_REDO_LAYOUT
                                | FINISH_LAYOUT_REDO_CONFIG
                                | FINISH_LAYOUT_REDO_WALLPAPER;
                    }    
                    if (mKeyguardMediator.isShowing()) {
                        mHandler.post(new Runnable() {
                            public void run() {
                                mKeyguardMediator.keyguardDone(false, false);
                            }    
                        });  
                    }    
                } else if (mHideLockScreen) {
                */
                    if (mKeyguard.hideLw(true)) {
                        changes |= FINISH_LAYOUT_REDO_LAYOUT
                                | FINISH_LAYOUT_REDO_CONFIG
                                | FINISH_LAYOUT_REDO_WALLPAPER;
                    }    
                    mKeyguardMediator.setHidden(true);
                /*
                } else {
                    if (mKeyguard.showLw(true)) {
                        changes |= FINISH_LAYOUT_REDO_LAYOUT
                                | FINISH_LAYOUT_REDO_CONFIG
                                | FINISH_LAYOUT_REDO_WALLPAPER;
                    }    
                    mKeyguardMediator.setHidden(false);
                } 
                */
위과 같이 처리하면 부팅 후 바로 Home Screen이 나옵니다.
------------------------------------------------------------------------------------------------------------------------------------------------------------
이 글을 작성 후 USB keyboard를 연결 하고 Home key가 동작하지 않는 버그를 발견했다.
W/KeyguardViewMediator( 2181): verifyUnlock called when not externally disabled
이와 같은 메세지를 출력하는데 이유는 아직 Lock Screen이 있는 상태로 인식 되기 때문인 것 같습니다,
그래서 위에서 제시한 코드를 rollback하고 다른 방법을 찾아 보았습니다.
의외로 간단하게 해결되었습니다.
framework/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
/** {@inheritDoc} */
public void beginAnimationLw(int displayWidth, int displayHeight) {
mTopFullscreenOpaqueWindowState = null;
mForceStatusBar = false;
mHideLockScreen = true;
//mHideLockScreen = false;
mAllowLockscreenWhenOn = false;
mDismissKeyguard = false;
}
mHideLockScreen을 true로 만들면 LockScreen도 안 보이고 Keyboard의 Home키가 동작하지 않는 두가지 문제가 동시에 해결됩니다.
 
댓글 1개:
이 문제를 해결하려고 자바 소스를 뒤져서 LockScreen 클래스가 관여하는 것까지는 찾았는데, 그 후에 막혀서 고민하다가 이 글을 찾게 되었습니다. 정말 감사합니다.^^
댓글 쓰기