검색이슈를 해결하고 싶어서 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가 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()) ||
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){
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이 안 받아지겠구나 생각했는데 다행이다..ㅎㅎ 새로운 이슈에도 참여하고 싶었지만 사실 멤버 개발자들이 원하는 다이얼로그 형식의 비밀번호를 어떻게 만들어야할지 모르겠어서 참여하지 않았다. 디자인은 너무너무 어렵다.😵
버그로 오해받은 이슈가 다시 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_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()) ||
passcode관련 이슈 등록으로 앱에서 계속해서 확인하기 위해 새 코드를 빌드할 때 마다 passcode를 설정했다 해제했다는 자주 반복하며 테스트 하고 있다. 그런데 갑자기 passcode 화면이 안예쁘다!😕 뭐지... 무슨 느낌이지 했는데 알고 보니 레이아웃 상단 타이틀과 취소 버튼이 왼쪽 정렬이 되어버렸다.
원래는 중앙 정렬이었는 데, #7338 이때 코드를 수정하면서 중앙 정렬이 적용되지 않은 것 같다.
text document를 생성하고 글을 작성하고 있는 데 '‧‧‧'버튼이 아래로 내려와서 겹쳐졌다.😲
작성 화면 왼쪽상단에 겹친 ''‧‧‧' 버튼
놀라서 작성을 멈추고 있었는 데 약 8초 후에 버튼이 다시 원래 자리로 돌아갔다..
원래대로 돌아온 ''‧‧‧' 버튼
그런데 애뮬레이터에서는 해당 오류가 발견되지 않았다. 그래서 은경님한테 부탁해서 테스트를 요청했더니 나와 같은 오류가 발생한다고 했다. 두명이나 발생한 오류면 이건 오류다! 한명만 발생하는 오류는 뭔가,,, 내 폰 문제일 것 같고 내 잘못일 것 같고,,, 그렇다😢 일단 오류는 발생했기 때문에 이슈로 등록하였다.#7354 💚
Nextcloud/android 멤버 개발자가 누구를 태그걸어 ping을 보냈다.
전수현 강사님께서 ping오면 pong하라고 하셨는데,,,ㅎㅎ 날 태그한게 아니니까,,, 알고보니까 Nextcloud/text 멤버 개발자를 부른 거였다. 이슈 올리기 전에 해당 코드를 찾아보려고 했는 데, 찾기가 너무 어려웠다. 그런데 이게 앱 이슈가 아니라 text 이슈였던 것이다.😅😅