android/오픈소스 기여

passcode 화면에서 뒤로가기 누르면 앱 닫도록 코드 구현 후 PR

uuna 2024. 4. 23. 12:47

[2020년 11월 19일 기술블로그에서 작성]

 

💚이전글 읽기💚

1. passcode 화면에서 뒤로가기 누르면 앱 닫기 (Issue #7343)

 
 

버그로 오해받은 이슈가 다시 enhancement label로 수정되었다.#7343 
그리고 멤버 개발자가 설명 고맙다고 말하면서 좋은 개선 사항이라 칭찬해줬다..ㅎㅎ😎

나... 칭찬 받았다

멤버 개발자의 의견을 듣고 나니 PR을 날려도 되겠다고 생각했다.

tobiasKaminsky 멤버 개발자는 구현을 정말 빠르게하고 PR을 날린다. 그래서 지금 당장 코드 구현을 하지 않으면 코드 기여를 할 수 없을거란 조마조마한 마음에,,ㅋㅋㅋ 얼른 안드로이드 스튜디오를 열어 코드 분석을 하였다. 

 

직전에 passcodelock.xml을 수정했기 때문에 이 레이아웃을 사용하는 클래스를 찾아봤다.

PassCodeActuvuty.java에서 사용하고 있었다. 그래서 이 클래스를 살펴봤다. 코드를 보니까 passcode를 설정하거나 해제할때도 이 클래스를 사용했다. 처음에는 onBackPressed()를 수정하여 앱을 실행시켜봤다. 근데.. 뒤로가기가 안된다.. 너무 쉽게 생각했나..😂

그래서 클래스 내부함수를 다시 확인했고, 그 중 onKeyDown()에서 키 이벤트 관련 코드들이 있었다. 

1
2
3
4
5
6
7
8
9
10
11
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()== 0){
            if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction()) ||
                ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) {
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
cs

주석을 읽어보니 여기서 뒤로가기 이벤트를 관리하는 것 같다!

ACTION_REQUEST_WITH_RESULT, ACTION_CHECK_WITH_RESULT는 passcode를 설정하거나 해제 동작 화면을 의미하는 변수인 것 같다. 그래서 다른 변수가 있나 찾아 봤는데, ACTION_CHECK 변수가 있었다. 변수명에서 오는 느낌이 딱 내가 원하는 passcode 화면이었다. 그래서 간단하게 Toast를 띄워 확인해봤는데.. 맞췄다!! 찾았다!!! 

passcode확인 화면에서 뒤로가기를 눌렀을 때! Toast Message가 잘 보인다. ㅎㅎ

 

 

제일 안에 있는 if문에 else if문을 추가했다.
그런데 passcode를 설정하거나 해제하기보다는 확인하는 게 더더더 자주 사용되지 않을까? 그래서 if문의 순서를 바꿨다. 아주 조금이라도 효율이 더 좋아질거라 믿는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()== 0){
            if(ACTION_CHECK.equals(getIntent().getAction())){
                moveTaskToBack(true);
                finishAndRemoveTask();
            }else if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction()) ||
                ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) {
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
cs

코드를 실행해보니 원하는 대로 잘 동작하였다.

현재는 PR을 날리고 의견을 기다리고 있는 상태이다.#7372 제발 제발 머지해주세요..🙏🏻

 

Android version: 5

Device model: Samsung Galaxy S9

Nextcloud app version: 3.15.0 Alpha 1