[2020년 12월 24일 기술블로그에서 작성]

 

Nextcloud/android의 Contributor가 되었다!😎

오픈소스 프로젝트를 기여하면서 다른 개발자들과 이야기하는 과정이 재밌었다!

앞으로 팀프로젝트를 진행할때도 코드 리뷰를 도입해서 팀원들과 실력을 쌓아가야겠다고 생각했다ㅎㅎ

 

 

 

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

 

   💚이전글 읽기💚

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

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

3. passcode 화면에서 뒤로가기 이벤트 PR -> Merge

 

 

검색이슈를 해결하고 싶어서 Nextcloud/server Repository를 살펴보다가 README 파일을 읽게 되었다. 여기에 기여에 관한 설명도 나와있었는데, 모든 기여자들은 기여한 파일 header comment에 copyright을 추가하라는 말이 있었다.

Nextcloud/android Repository에서도 이 글을 읽었던 것 같아서 확인해보니 동일한 설명이 android에도 있었다. 저번 코드 기여했을 때 copyright을 작성하지 않고 merge가 되었는데,,늦었지만 나도 copyright을 추가하면 좋겠다고 생각했다.

여기에 몇가지 고민사항이 있었다. 

첫번째로 나는 하나의 클래스나 하나의 함수를 새로 구현한 것이 아닌 기존에 있던 함수의 일부로 새 기능을 추가 구현한 것 인데, 이것도 copyright 추가를 할 수 있을까?🤔

두전째는 몇가지 파일을 열어서 확인해보니 member거나 collaborator만 copyright을 적는 것 같았다.😥

세번째로 나는 이미 merge가 되었는 데, copyright comment만 추가하는 걸 멤버개발자들이 merge해줄지 걱정되었다.😩

그래도 시도라도 해보자! 라는 마음에 Nextcloud/android 멤버개발자인 tobias에게 메일을 보냈다. 

tobias한테 메일보내기,, 너무 무서웠다,, 멤버 개발자한테 메일 처음 보내는 데,, 잘 갔을지도 걱정되고,,

 

거절 답변 쪽으로 올거라 생각하고 있었다. 혹시 늦어서 copyright을 안 받아주는 거면,, 코드 기여하면서 바로 같이 안 올린 내 잘못이니까,,, 어쩔 수 없지😭😭  다음날 tobias에게 답장이 왔는 데, copyright을 올려도 된다는 답변이었다!!!!

 

답장을 받자마자 copyright을 추가해서 PR을 날렸고, 다른 멤버 개발자 Andy가 merge를 해줬다. #7683

시험기간이라서 요새 활동을 못 했는데, Andy가 welcome back이라고,,했다.🤣🤣
아직 시험이 안끝나서 활동을 못 합니다,,, 끝나고 다시 열심히 활동하는 걸로!👊🏻

 

★★코드 기여 시 다시 기여가이드를 살펴보고 추가할 사항이 있는지 체크해야겠다! 할 수 있는 건데 안하면 나만 속상하니까,,,🙁

 

 

Nextcloud/android Github: https://github.com/nextcloud/android

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

 

  💚이전글 읽기💚

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

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

#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

 
 

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

 

💚이전글 읽기💚

1. passcode 레이아웃 정렬 변경 후 PR

 

 

 
passcode 레이아웃 정렬을 수정한 후 날린 PR #7370에 멤버 개발자 AndyScherzinger가 to review 레이블을 달아줬다.😍 그리고 다른 멤버 개발자 tobiasKaminsky에게 리뷰를 요청했다.

tobiasKaminsky는 중앙 정렬이 아닌 왼쪽 정렬을 한 것이 더 일반적이라는 코멘트와 함께 AndyScherzinger와 nextcloud/designers를 태그 걸어 어떻게 생각하는지 물어봤다. 나는 중앙 정렬이 더 예쁘다고 생각했는 데,, 디자인은 너무 어렵다.😂😂

AndyScherzinger는 타이틀은 왼쪽정렬, PIN은 중앙정렬, 취소버튼은 오른쪽 정렬이어야 한다고 코멘트를 남겼다. 그리고 현재와 같은 디자인이 아닌 어두운 배경에 둥근 네모 상자에 이들을 표시하는 게 좋다고 했다. 현재는 하얀 배경에 요소들이 표시되어있는데, AndyScherzinger의 추가 의견은 괜찮다고 생각한다.

Jancborchardt도 코멘트를 남겨줬다. 사실 Nextcloud/android에서 처음 보는 개발자라서 우리처럼 이슈 관리하고 있는 개발자인가 했는데 멤버 개발자표시가 있었다!! 프로필을 보니 오픈소스 디자이너였다! 아까 태그걸린 nextcloud/designers와 관련있는 사람인가보다. 디자이너...멋있다..👍🏻

내 PR을 nice enhancement라고 해줬다. 감동... 😭😭😭
 

Jancborchardt는 코멘트를 정말 깔끔하게 정리했다. 우선 전제화면이아닌 다이얼로그처럼 보이게 하자는 AndyScherzinger 의견에 동의했다. 취소 버튼은 이곳에서 주가 아니게 때문에 기본으로 스타일을 지정해서는 안되고 중앙에 정렬해야 한다고 한다. 

Jancborchardt는 디자인을 추가로 수정하는 것은 새로운 이슈로 옮기자고 했고, 병합되었다! 이전 의견까지는 PR이 안 받아지겠구나 생각했는데 다행이다..ㅎㅎ 새로운 이슈에도 참여하고 싶었지만 사실 멤버 개발자들이 원하는 다이얼로그 형식의 비밀번호를 어떻게 만들어야할지 모르겠어서 참여하지 않았다. 디자인은 너무너무 어렵다.😵

#7403에서는 중앙 정렬로 변경된 디자인을 테스트할 수 있는 apk 파일이 있다.

 

AngyScherzinger는 마지막에 이렇게 코멘트를 남겨준다.!! :-)
 

 

 

 

Nextcloud/android Github: https://github.com/nextcloud/android

[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

 

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

 

passcode관련 이슈 등록으로 앱에서 계속해서 확인하기 위해 새 코드를 빌드할 때 마다 passcode를 설정했다 해제했다는 자주 반복하며 테스트 하고 있다. 그런데 갑자기 passcode 화면이 안예쁘다!😕 뭐지... 무슨 느낌이지 했는데 알고 보니 레이아웃 상단 타이틀과 취소 버튼이 왼쪽 정렬이 되어버렸다. 

원래는 중앙 정렬이었는 데, #7338 이때 코드를 수정하면서 중앙 정렬이 적용되지 않은 것 같다.

passcodelock.xml에서 중앙 정렬이 되도록 수정하였다.

그리고 현재는 PR을 날리고 기다리고 있는 상태이다! #7370

+) 테스트마다 결과가 따로 나와서 fail 메일이 많이 온다..헤헤...
수빈님 게시글을 보고 DCO 테스트 통과를 위해서는 Commit에 서명을 하면 된다는 사실을 알았다..! 

 

Android version: 5

Device model: Samsung Galaxy S9

Nextcloud app version: 3.15.0 Alpha 1

 
Nextcloud/android Github: https://github.com/nextcloud/android

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

앱의 기능들을 이것저것 실행해보다가 발견한 오류이다!

text document를 생성하고 글을 작성하고 있는 데 '‧‧‧'버튼이 아래로 내려와서 겹쳐졌다.😲
작성 화면 왼쪽상단에 겹친 ''‧‧‧' 버튼
놀라서 작성을 멈추고 있었는 데 약 8초 후에 버튼이 다시 원래 자리로 돌아갔다..
원래대로 돌아온 ''‧‧‧' 버튼

그런데 애뮬레이터에서는 해당 오류가 발견되지 않았다. 그래서 은경님한테 부탁해서 테스트를 요청했더니 나와 같은 오류가 발생한다고 했다. 두명이나 발생한 오류면 이건 오류다! 한명만 발생하는 오류는 뭔가,,, 내 폰 문제일 것 같고 내 잘못일 것 같고,,, 그렇다😢 일단 오류는 발생했기 때문에 이슈로 등록하였다. #7354 💚

 

 
Nextcloud/android 멤버 개발자가 누구를 태그걸어 ping을 보냈다.
전수현 강사님께서 ping오면 pong하라고 하셨는데,,,ㅎㅎ 날 태그한게 아니니까,,, 알고보니까 Nextcloud/text 멤버 개발자를 부른 거였다. 이슈 올리기 전에 해당 코드를 찾아보려고 했는 데, 찾기가 너무 어려웠다. 그런데 이게 앱 이슈가 아니라 text 이슈였던 것이다.😅😅

멤버 개발자가 이 이슈를 Nextcloud/text로 옮겼다.#1186 

나는 이제 Nextcloud 세개의 레포에 이슈를 등록하게 되었다ㅏ...하하
 
 

그리고 멤버 개발자가 Nextcloud 어떤 버전을 실행시켰는지 물어봤는데 내가 서버를 따로 만든들어서 사용하고 있는 게 아니라 어떤 버전을 사용하고 있는지 모른다.. 

사실대로 모른다고 이야기했다! 모르는 걸 어떡하냐! 찾아봐도 서버 버전 정보가 어디에 있는 지 모르겠다,,
 
 
 
그래서 버전을 알고있는 NC20 데모를 실행하여 문서를 작성했고 동일한 오류가 발생하는 것을 확인했다.

브라우저에서도 오류가 발생하는지 물어봐서 원래 사용하던 NC와 데모 모두 테스트 해보았다. 웹에서는 버그가 발생하지 않았다.

위 내용을 이슈 내용에 추가하였다.

생각지도 못하게 여러 레포지토리에서 이슈를 등록하게 되었는 데 셋 다 열심히 활동해야겠다! 처음에는 이슈 등록하는 게 무섭고 두려웠는데 이제는 이슈 등록하고 싶어서 한시간동안 앱만 사용하기도 한다,, 이슈 등록 너무 재밌다!!! 이슈 관리도 재밌다!!👍🏻👍🏻 

 

Android version: 8

Device model: Samsung Galaxy S7

Nextcloud app version: 3.15.0 Alpha 1

Nextcloud server version: 20

 

Nextcloud/text Github: https://github.com/nextcloud/text

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

 

이슈 #7331를 확인하면서 앱에 대해 불편함 점을 발견했다.

passcode 화면일 때, 뒤로가기 버튼을 눌러도 반응이 없다. 버그는 아니었고 뒤로가기를 막아놓은 것 같았다. passcode 설정을 안했을 때 앱을 실행시키고 뒤로가기 버튼을 누르면 앱이 닫힌다. passcode 화면에서도 앱이 닫혀야하지 않을까,,? 

개발자가 아닌 사용자 입장에서 생각했을 때 뒤로가기 버튼을 눌렀는데 아무런 반응이 없으면 당황할 것 같다. passcode 화면에서 뒤로가기를 눌렀을 때 앱이 닫히던가 홈버튼을 누르라는 메세지라도 띄워주면 좋을 것 같다고 생각하여 이슈로 등록하였다. #7343

멤버 개발자가 passcode을 설정할 때 생기는 이슈로 오해한 것 같다. 그리고 버그라고 생각했는 지,,, 레이블을 bug로 수정하였다. 그리고 스크린샷을 원했는데 해당 이슈를 사진으로 찍기 어려워서 영상으로 녹화하여 링크를 걸었다. 

 

Android version: 5

Device model: Samsung Galaxy S9
Nextcloud app version: 3.15.0 Alpha 1

 


+ Recent posts