passcode 화면에서 뒤로가기 누르면 앱 닫도록 코드 구현 후 PR
[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를 띄워 확인해봤는데.. 맞췄다!! 찾았다!!!

제일 안에 있는 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