[Nextcloud/android] passcode 화면에서 뒤로가기 이벤트 PR -> Merge

  💚이전글 읽기💚




#7372 PR을 날린 후 멤버 개발자 AndyScherzinger가 to review 레이블을 추가해줬다.

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
첫 번째 commit (코드 기여 4~7번째 줄)

그리고 다른 멤버 개발자 tobiasKaminsky가 리뷰해줬다. 
Nextcloud가 API 19부터 지원을 하고 있는 데, 위 코드가 동작하지 않는다는 의견이었다.😥
추가로 API 21이상부터는 잘 동작하지만 Nextcloud는 여전히 API 19를 지원할 예정이라 API 19도 동작하는 코드를 찾던가 아니라면 저 코드를 API 21이상부터 사용하도록 하는게 좋겠다고 이야기했다. 

최근에 pull 받은 코드로는 빨간 줄이 뜨지 않아서 확인을 하지않았다.. 좀 더 신중하게 알아보고 구현할 걸..
알아보니 finishAndRemoveTask()를 API 21이상부터 지원을 하였다. 버전 체크만 가능하게 할까하다가,,, 개선된 기능은 모두가 사용할 수 있으면 좋겠다는 바람에 좀 더 고민해보기로 하였다. 

finish() 대신 finishAndRemoveTask()를 사용한 이유는 일반적으로 finish()를 사용하면 현재 Activity가 종료되면서 이전 Activity로 돌아간다고 생각해 메인화면이 보일까봐하는 걱정에서였다. 그냥 뒤로가기를 눌렀을 뿐인데 passcode가 풀리면 안되니까,, 

그런데 finish()로 코드를 수정하고 앱을 실행시켜봤더니 원하는 대로 잘 동작하였다. 두가지 방법으로 테스트를 해봤다. 

- passcode화면에서 뒤로가기 후 앱 실행 //성공했다.
- 메인화면에서 카테고리 변경 후 앱 닫기 그리고 5초 후 다시 들어온 앱에서 보이는 passcode 화면에서 뒤로가기 후 앱 실행 //성공했다. 이 테스트는  앱 실행 후 passcode를 입력했을 때 화면이 리셋되지 않고 변경한 카테고리가 잘 보이는 지 테스트 하기 위함이었다.

두 테스트 모두 원하는 결과를 얻었고 finish()로 변경했으니 API 19도 동작이 가능할 것이라 생각해 새로운 commit을 날렸다.😊


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);
            finish();
        }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
두 번째 commit (코드 기여 4~7번째 줄)

코드 변경 요구,, 빨간 버튼이 너무 무섭다

tobiasKaminsky가 테스트해봤냐고 물어보며 전에 내가 걱정한 것과 동일한 상황에 대해 이야기를 하였다. 그리고 코드 변경을 요구했다.

그래서 나는 참고영상을 첨부하여 테스트를 했고 앱이 원하는대로 잘 닫혔다. 혹시 다른 API에서는 동작이 잘 하지않는지 물어봤다. 동작하지 않는 다면, 첫번째 commit한 코드에서 버전 체크를 추가하는 것으로 바꿀 것이라 이야기했다. 

AndyScherzinger도 코멘트를 남겨줬는 데, 내가 했던 두가지 테스트가 아닌 다른 방식의 wack-up 시나리오 테스트를 알려줬다.
그리고 AndyScherzinger 말로는 다음 릴리즈 부터는 API 21이상만을 지원한다고 하였다. 그래서 버전체크를 하는 것만으로도 괜찮다고,,, 

사실 나는 이렇게 해도 잘 동작하였다.😭😭왜 잘 될까,,,?😭😭

이렇게 되면 첫번째 코드에서 버전체크하는 것도 괜찮다고 생각했다.
사실 두번째 commit 코드는 API 19도 동작하고 원하는 결과로 잘 동작이 되어 올린 것 뿐,, 나도 왜 이렇게 동작이 되는 지 이해하지 못했다. 코드를 구현한 나도 이해를 못하는 데 그걸 보는 다른 개발자들도 이해를 못 할 수 밖에...😖 

곧 새롭게 릴리즈 되는 Nextcloud는 API 19를 지원하지 않으니, 차라리 첫번째 코드에서 버전체크를 해 현재는 API 19에서 오류가 나지 않게 끔 구현하자!!고 생각했다. 

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()) && Build.VERSION.SDK_INT>=21){
            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
세 번째 commit (코드 기여 4~7번째 줄)

그래서 API 21이상의 경우만 앱이 닫히도록 하였다.
tobiasKaminsky는 적절한 이름인 Lollipop으로 변경해달라고 요청했다. 

테스트를 해봤는데 잘 된다고 엄지도 날려줬다.ㅎㅎ

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()) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            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
네 번째 commit (코드 기여 4~7번째 줄)

21이랑 Lollipop으로 코드를 구현하는 게 뭐가 다른가 생각했는 데, 코드 가독성이 좋을 것 같다. 다른 개발자들이 나중에 이 코드를 읽을 때 21보다는 Lollipop이 안드로이드 버전의 스마트폰을 이야기하는 지 한번에 알 수 있을 것이라 생각한다. 

앞으로는 빠르게 코드 구현하는 것도 좋지만 구현하면서 가독성도 중요하게 생각하며 구현해야겠다!! 

Nextcloud에 기여하면서 많은 것들을 배우고 다짐하는 것 같다. 꼭꼭 기억하고 실천해야지잇!😎😎

두 멤버 개발자의 승인을 받았고 잘 병합이 되었다!!✌🏻😆
개발 블로그 이전 게시글에서 모든 팀원의 응원 댓글을 받았는 데, 정말 고마웠다!


병합되기 위한 노력!!!! 네 번의 commit 기록! 진짜 뿌듯,,,잘했당💚💚💚



Android version: 5

Device model: Samsung Galaxy S9

Nextcloud app version: 3.15.0 Alpha 1



una.kwon Github: https://github.com/Kuuuna98
Nextcloud/android Github: https://github.com/nextcloud/android

댓글

이 블로그의 인기 게시물

[Nextcloud/android] 배터리 최적화 제외 여부 판단 오류 (Issue #7304)

[Nextcloud/server, android] 개발 환경 구성