2011년 11월 13일 일요일

android LockScreen 사용 안 하기

android는 Lock Screen을 풀어야 사용할 수 있는 컨셉입니다.

당연히 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 클래스가 관여하는 것까지는 찾았는데, 그 후에 막혀서 고민하다가 이 글을 찾게 되었습니다. 정말 감사합니다.^^