오픈소스 기여에 대한 관심은 컸지만, 복잡한 프로젝트에 내가 기여할 수 있을지에 대한 의구심으로 주저하게 되었다. 그럼에도 불구하고, 복잡한 문제보다는 간단한 이슈부터 차근차근 해결해 나가는 것으로 시작하기로 마음먹었다.
우선 good first issue, kotlin, comments, android 위주로 기여할 이슈를 찾았다.
내가 한번이라도 경험해봤던 위주로 이슈를 찾기 시작했다..
검색을 통해 relative layout을 constraint layout으로 전환하는 이슈를 발견하고, 이에 도전하기로 결정했다.
먼저 댓글을 통해 작업 할당을 요청한 후, 진행해 보라는 답변을 받았다. 이후 assignees 목록에 이름이 추가된 것을 확인하고, 프로젝트를 fork하여 작업을 시작했다.
README.md에 작성된 내용과 추가적으로 확인해야하는 부분을 체크리스트를 만들었다.
Build APK Debug
./gradlew assembleDebug
Execute Kotlin Liner
./gradlew app:ktlintCheck --info
Execute instrumented tests
./gradlew connectedAndroidTest
하나씩 체크리스트를 따라가며 검토하였다.
간단하게 relative layout을 constraint layout으로 교체만 하면 된다고 생각했는데 생각지도 않은 문제가 발생하였다
linear progress indicator가 100%일 떄 오른쪽이 잘리는 문제가 발생하였다
그래서 해당 하는 Adapter 코드를 살펴보았다.
// ...
trackersPB.apply {
val newWidth = (getDisplayWidth(context) * trackerPercentage) / 100
val params = layoutParams.apply {
width = newWidth.toInt()
}
layoutParams = params
}
// ...
private fun getDisplayWidth(context: Context): Int {
val activity = FragmentComponentManager.findActivity(context) as Activity
val windowMetrics =
WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(activity)
return windowMetrics.bounds.width()
}
linear progress indicator의 width를 getDisplayWidth를 통해서 너비를 측정한 후 trackerPercentage에 따라 너비를 조절하고 있는 것을 확인할 수 있다.
getDisplayWidth를 holder.itemView.width를 변경해서 시도 했지만 여전히 linear progress indicator가 잘리는 현상이 발생하였다.
// ...
trackersPB.apply {
post {
val newWidth = (holder.itemView.width * trackerPercentage) / 100
val params = layoutParams.apply {
width = newWidth.toInt()
}
layoutParams = params
}
}
// ...
그래서 초기에 View가 그려질 때는 width의 정확한 크기를 알 수 없다고 생각을 하였고 post 메소드를 사용하여 뷰가 완전히 그려진 후에 코드를 실행하도록 하였다. 이렇게 함으로써 뷰의 최종 크기가 결정된 후에 width 조절 작업을 수행하게 되고 뷰의 크기를 정확하게 조절하게 되었다.
커밋 컨벤션 준수하여 코드 변경 사항을 커밋한 뒤, PR을 제출했다.
PR을 제출하고 프로젝트 담당자가 Thanks for your contribution :) 댓글을 남기며 첫 오픈소스 기여가 머지되었다!
오픈소스 기여의 첫걸음이 어려웠지만, 간단한 이슈부터 시작해보니 머지 성공을 경험하며 큰 보람을 느꼈다.